[cmucl-cvs] [git] CMU Common Lisp branch master updated. snapshot-2012-01-28-gd6cb31e

Raymond Toy rtoy at common-lisp.net
Sat Feb 4 03:47:44 UTC 2012


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMU Common Lisp".

The branch, master has been updated
       via  d6cb31e417a1f73fcd326de8534f6a3da0f2cc89 (commit)
      from  ce8d55de55c26673c07c985bc21db14c2e2652b5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit d6cb31e417a1f73fcd326de8534f6a3da0f2cc89
Author: Raymond Toy <toy.raymond at gmail.com>
Date:   Fri Feb 3 19:47:29 2012 -0800

    Fix ticket:55.  Copy all of the sigmask instead of just a few.  This
    only affected linux which uses an array for the sigmask.

diff --git a/src/lisp/interrupt.c b/src/lisp/interrupt.c
index de17cee..b6332f5 100644
--- a/src/lisp/interrupt.c
+++ b/src/lisp/interrupt.c
@@ -169,6 +169,16 @@ interrupt_internal_error(HANDLER_ARGS, boolean continuable)
 	arch_skip_instruction(context);
 }
 
+static void
+copy_sigmask(sigset_t *dst, sigset_t *src)
+{
+#ifndef __linux__
+    *dst = *src;
+#else
+    memcpy(dst, src, NSIG / 8);
+#endif
+}
+
 void
 interrupt_handle_pending(os_context_t * context)
 {
@@ -190,11 +200,8 @@ interrupt_handle_pending(os_context_t * context)
 #endif
 	    undo_fake_foreign_function_call(context);
     }
-#ifndef __linux__
-    context->uc_sigmask = pending_mask;
-#else
-    memcpy(&context->uc_sigmask, &pending_mask, NSIG / LONG_BIT);
-#endif
+
+    copy_sigmask(&context->uc_sigmask, &pending_mask);
     sigemptyset(&pending_mask);
 
     if (pending_signal) {
@@ -300,7 +307,7 @@ setup_pending_signal(HANDLER_ARGS)
      *
      */
     pending_code.si_code = CODE(code);
-    pending_mask = ucontext->uc_sigmask;
+    copy_sigmask(&pending_mask, &ucontext->uc_sigmask);
     FILLBLOCKSET(&ucontext->uc_sigmask);
 }
 
@@ -372,11 +379,7 @@ interrupt_maybe_gc(HANDLER_ARGS)
 	if (arch_pseudo_atomic_atomic(context)) {
 	    maybe_gc_pending = TRUE;
 	    if (pending_signal == 0) {
-#ifndef __linux__
-		pending_mask = context->uc_sigmask;
-#else
-		memcpy(&pending_mask, &context->uc_sigmask, NSIG / LONG_BIT);
-#endif
+		copy_sigmask(&pending_mask, &context->uc_sigmask);
 		FILLBLOCKSET(&context->uc_sigmask);
 	    }
 	    arch_set_pseudo_atomic_interrupted(context);

-----------------------------------------------------------------------

Summary of changes:
 src/lisp/interrupt.c |   25 ++++++++++++++-----------
 1 files changed, 14 insertions(+), 11 deletions(-)


hooks/post-receive
-- 
CMU Common Lisp




More information about the cmucl-cvs mailing list