From acad2b1e226f8fd3cf8252f5997aba94875c5cbc Mon Sep 17 00:00:00 2001 From: David Xu 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/thread') diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index a99395fd1b38..d2be9947ac12 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.3