From 05a4fb8c6e2d4ef9d563419c0af6b81ab5bfd6c0 Mon Sep 17 00:00:00 2001 From: davidxu Date: Thu, 18 Apr 2013 05:12:11 +0000 Subject: Revert revision 249323, the PR/177624 is confusing, that bug is caused by using buggy getcontext/setcontext on same stack, while swapcontext normally works on different stack, there is no such a problem. --- lib/libthr/thread/thr_sig.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lib/libthr') diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index a99395f..d2be994 100644 --- a/lib/libthr/thread/thr_sig.c +++ b/lib/libthr/thread/thr_sig.c @@ -737,4 +737,13 @@ _setcontext(const ucontext_t *ucp) return __sys_setcontext(&uc); } -__weak_reference(__sys_swapcontext, swapcontext); +__weak_reference(_swapcontext, swapcontext); +int +_swapcontext(ucontext_t *oucp, const ucontext_t *ucp) +{ + ucontext_t uc; + + (void) memcpy(&uc, ucp, sizeof(uc)); + remove_thr_signals(&uc.uc_sigmask); + return __sys_swapcontext(oucp, &uc); +} -- cgit v1.1