diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2013-02-06 15:43:28 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2013-02-06 15:43:28 +0000 |
commit | f7b7532a4114b831f5ef66ed992d28e65fb3973f (patch) | |
tree | 929ad375fc60be5b08f35b49ff681db96d97b842 /nuttx/sched/sig_timedwait.c | |
parent | d8a1b61690862777b137ec182a0d62dcf4ee8db2 (diff) | |
download | px4-nuttx-f7b7532a4114b831f5ef66ed992d28e65fb3973f.tar.gz px4-nuttx-f7b7532a4114b831f5ef66ed992d28e65fb3973f.tar.bz2 px4-nuttx-f7b7532a4114b831f5ef66ed992d28e65fb3973f.zip |
Changed needed to fix issues with task_restart()
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5615 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/sched/sig_timedwait.c')
-rw-r--r-- | nuttx/sched/sig_timedwait.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/nuttx/sched/sig_timedwait.c b/nuttx/sched/sig_timedwait.c index 21e40f170..fd8939a1d 100644 --- a/nuttx/sched/sig_timedwait.c +++ b/nuttx/sched/sig_timedwait.c @@ -181,11 +181,12 @@ int sigtimedwait(FAR const sigset_t *set, FAR struct siginfo *info, FAR struct tcb_s *rtcb = (FAR struct tcb_s*)g_readytorun.head; sigset_t intersection; FAR sigpendq_t *sigpend; - WDOG_ID wdog; irqstate_t saved_state; int32_t waitticks; int ret = ERROR; + DEBUGASSERT(rtcb->waitdog == NULL); + sched_lock(); /* Not necessary */ /* Several operations must be performed below: We must determine if any @@ -265,8 +266,8 @@ int sigtimedwait(FAR const sigset_t *set, FAR struct siginfo *info, /* Create a watchdog */ - wdog = wd_create(); - if (wdog) + rtcb->waitdog = wd_create(); + if (rtcb->waitdog) { /* This little of nonsense is necessary for some * processors where sizeof(pointer) < sizeof(uint32_t). @@ -278,7 +279,7 @@ int sigtimedwait(FAR const sigset_t *set, FAR struct siginfo *info, /* Start the watchdog */ - wd_start(wdog, waitticks, (wdentry_t)sig_timeout, 1, wdparm.dwarg); + wd_start(rtcb->waitdog, waitticks, (wdentry_t)sig_timeout, 1, wdparm.dwarg); /* Now wait for either the signal or the watchdog */ @@ -286,7 +287,8 @@ int sigtimedwait(FAR const sigset_t *set, FAR struct siginfo *info, /* We no longer need the watchdog */ - wd_delete(wdog); + wd_delete(rtcb->waitdog); + rtcb->waitdog = NULL; } } |