svn commit: r251284 - head/lib/libthr/thread

Konstantin Belousov kib at FreeBSD.org
Mon Jun 3 04:22:43 UTC 2013


Author: kib
Date: Mon Jun  3 04:22:42 2013
New Revision: 251284
URL: http://svnweb.freebsd.org/changeset/base/251284

Log:
  Since the cause of the problems with the __fillcontextx() was
  identified, unify the code of check_deferred_signal() for all
  architectures, making the variant under #ifdef x86 common.
  
  Tested by:	marius (sparc64)
  Sponsored by:	The FreeBSD Foundation
  MFC after:	2 weeks

Modified:
  head/lib/libthr/thread/thr_sig.c

Modified: head/lib/libthr/thread/thr_sig.c
==============================================================================
--- head/lib/libthr/thread/thr_sig.c	Mon Jun  3 04:19:21 2013	(r251283)
+++ head/lib/libthr/thread/thr_sig.c	Mon Jun  3 04:22:42 2013	(r251284)
@@ -318,31 +318,23 @@ check_deferred_signal(struct pthread *cu
 	ucontext_t *uc;
 	struct sigaction act;
 	siginfo_t info;
+	int uc_len;
 
 	if (__predict_true(curthread->deferred_siginfo.si_signo == 0))
 		return;
 
-#if defined(__amd64__) || defined(__i386__)
-	int uc_len;
 	uc_len = __getcontextx_size();
 	uc = alloca(uc_len);
 	getcontext(uc);
 	if (curthread->deferred_siginfo.si_signo == 0)
 		return;
 	__fillcontextx2((char *)uc);
-#else
-	ucontext_t ucv;
-	uc = &ucv;
-	getcontext(uc);
-#endif
-	if (curthread->deferred_siginfo.si_signo != 0) {
-		act = curthread->deferred_sigact;
-		uc->uc_sigmask = curthread->deferred_sigmask;
-		memcpy(&info, &curthread->deferred_siginfo, sizeof(siginfo_t));
-		/* remove signal */
-		curthread->deferred_siginfo.si_signo = 0;
-		handle_signal(&act, info.si_signo, &info, uc);
-	}
+	act = curthread->deferred_sigact;
+	uc->uc_sigmask = curthread->deferred_sigmask;
+	memcpy(&info, &curthread->deferred_siginfo, sizeof(siginfo_t));
+	/* remove signal */
+	curthread->deferred_siginfo.si_signo = 0;
+	handle_signal(&act, info.si_signo, &info, uc);
 }
 
 static void


More information about the svn-src-all mailing list