summaryrefslogtreecommitdiff
path: root/nuttx/sched/sig_timedwait.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-02-06 15:43:28 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-02-06 15:43:28 +0000
commitf7b7532a4114b831f5ef66ed992d28e65fb3973f (patch)
tree929ad375fc60be5b08f35b49ff681db96d97b842 /nuttx/sched/sig_timedwait.c
parentd8a1b61690862777b137ec182a0d62dcf4ee8db2 (diff)
downloadpx4-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.c12
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;
}
}