svn commit: r286582 - head/lib/libthr/thread
Konstantin Belousov
kib at FreeBSD.org
Mon Aug 10 17:02:44 UTC 2015
Author: kib
Date: Mon Aug 10 17:02:42 2015
New Revision: 286582
URL: https://svnweb.freebsd.org/changeset/base/286582
Log:
Pre-resolve symbols required for the deferred signal processing. This
avoids recursion into rtld when leaving libthr critical section for
the deferred signal delivery.
For the same reason, use syscall(2) instead of referencing
__sys_sigreturn(2). Syscall() is already pre-resolved for fork()
interceptor.
Tested by: Andre Meiser <ortadur at web.de>
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Modified:
head/lib/libthr/thread/thr_rtld.c
head/lib/libthr/thread/thr_sig.c
Modified: head/lib/libthr/thread/thr_rtld.c
==============================================================================
--- head/lib/libthr/thread/thr_rtld.c Mon Aug 10 16:32:47 2015 (r286581)
+++ head/lib/libthr/thread/thr_rtld.c Mon Aug 10 17:02:42 2015 (r286582)
@@ -185,7 +185,9 @@ _thr_rtld_init(void)
{
struct RtldLockInfo li;
struct pthread *curthread;
+ ucontext_t *uc;
long dummy = -1;
+ int uc_len;
curthread = _get_curthread();
@@ -231,4 +233,9 @@ _thr_rtld_init(void)
_thr_signal_block(curthread);
_rtld_thread_init(&li);
_thr_signal_unblock(curthread);
+
+ uc_len = __getcontextx_size();
+ uc = alloca(uc_len);
+ getcontext(uc);
+ __fillcontextx2((char *)uc);
}
Modified: head/lib/libthr/thread/thr_sig.c
==============================================================================
--- head/lib/libthr/thread/thr_sig.c Mon Aug 10 16:32:47 2015 (r286581)
+++ head/lib/libthr/thread/thr_sig.c Mon Aug 10 17:02:42 2015 (r286582)
@@ -30,6 +30,7 @@
#include <sys/param.h>
#include <sys/types.h>
#include <sys/signalvar.h>
+#include <sys/syscall.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>
@@ -257,7 +258,7 @@ handle_signal(struct sigaction *actp, in
/* reschedule cancellation */
check_cancel(curthread, &uc2);
errno = err;
- __sys_sigreturn(&uc2);
+ syscall(SYS_sigreturn, &uc2);
}
void
More information about the svn-src-all
mailing list