summaryrefslogtreecommitdiff
path: root/nuttx/arch/c5471/src/up_sigdeliver.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-03-08 18:34:11 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-03-08 18:34:11 +0000
commita8872bea509f507b8f595e210e49fd06d8aa0d49 (patch)
tree83f8273dcee57f28f22a6f1b01460125f8135835 /nuttx/arch/c5471/src/up_sigdeliver.c
parent77f556a36f68292909cd98a7ddeb58c3f739f324 (diff)
downloadpx4-nuttx-a8872bea509f507b8f595e210e49fd06d8aa0d49.tar.gz
px4-nuttx-a8872bea509f507b8f595e210e49fd06d8aa0d49.tar.bz2
px4-nuttx-a8872bea509f507b8f595e210e49fd06d8aa0d49.zip
Fix c5471 signal handling + deallocation bug
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@44 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/c5471/src/up_sigdeliver.c')
-rw-r--r--nuttx/arch/c5471/src/up_sigdeliver.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/nuttx/arch/c5471/src/up_sigdeliver.c b/nuttx/arch/c5471/src/up_sigdeliver.c
index df1040314..d19881c53 100644
--- a/nuttx/arch/c5471/src/up_sigdeliver.c
+++ b/nuttx/arch/c5471/src/up_sigdeliver.c
@@ -81,7 +81,10 @@ void up_sigdeliver(void)
sig_deliver_t sigdeliver;
up_ledon(LED_SIGNAL);
- ASSERT(rtcb->xcp.sigdeliver);
+
+ dbg("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
+ rtcb, rtcb->xcp.sigdeliver, rtcb->sigpendactionq.head);
+ ASSERT(rtcb->xcp.sigdeliver != NULL);
/* Save the real return state on the stack. */
@@ -99,12 +102,9 @@ void up_sigdeliver(void)
sigdeliver = rtcb->xcp.sigdeliver;
rtcb->xcp.sigdeliver = NULL;
- /* Then enable interrupts. We should still be safe from
- * any further signal handling actions until we also
- * nullify tcb->xcp.sigdeliver.
- */
+ /* Then restore the task interrupt statat. */
- irqrestore(SVC_MODE | F_BIT);
+ irqrestore(regs[REG_CPSR]);
/* Deliver the signals */
@@ -115,5 +115,6 @@ void up_sigdeliver(void)
*/
up_ledoff(LED_SIGNAL);
+ dbg("Resuming\n");
up_fullcontextrestore(regs);
}