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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to