summaryrefslogtreecommitdiffstats
path: root/lib/libpthread/thread/thr_sig.c
diff options
context:
space:
mode:
authordeischen <deischen@FreeBSD.org>2000-11-14 20:00:19 +0000
committerdeischen <deischen@FreeBSD.org>2000-11-14 20:00:19 +0000
commit5ed7dea44c3c8564f41807299e6844d6d3adc3fe (patch)
tree72b03470b2ccceba1843c58253e889d8fb340d45 /lib/libpthread/thread/thr_sig.c
parent5f42d57882aa1072ce12350297665532c3ad1b61 (diff)
downloadFreeBSD-src-5ed7dea44c3c8564f41807299e6844d6d3adc3fe.zip
FreeBSD-src-5ed7dea44c3c8564f41807299e6844d6d3adc3fe.tar.gz
When entering the scheduler from the signal handler, tell
the kernel to (re)use the alternate signal stack. In this case, we don't return normally from the signal handler, so the kernel still thinks we are using the signal stack. The fixes a nasty bug where the signal handler can start fiddling with the stack of a thread while the handler is actually running on the same stack. MFC candidate
Diffstat (limited to 'lib/libpthread/thread/thr_sig.c')
-rw-r--r--lib/libpthread/thread/thr_sig.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/libpthread/thread/thr_sig.c b/lib/libpthread/thread/thr_sig.c
index 3bcd9c1..3ac9740 100644
--- a/lib/libpthread/thread/thr_sig.c
+++ b/lib/libpthread/thread/thr_sig.c
@@ -1066,7 +1066,7 @@ thread_sigframe_add(pthread_t thread, int sig, int has_args)
/*
* Set up the context:
*/
- stackp += sizeof(double);
+ stackp -= sizeof(double);
_setjmp(thread->ctx.jb);
SET_STACK_JB(thread->ctx.jb, stackp);
SET_RETURN_ADDR_JB(thread->ctx.jb, _thread_sig_wrapper);
OpenPOWER on IntegriCloud