[cmucl-commit] [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-commit
mailing list