[pypy-svn] r39315 - pypy/dist/pypy/translator/c/src

ac at codespeak.net ac at codespeak.net
Thu Feb 22 18:08:13 CET 2007


Author: ac
Date: Thu Feb 22 18:08:12 2007
New Revision: 39315

Modified:
   pypy/dist/pypy/translator/c/src/signals.h
Log:
Use sigaction (if available) instead of signal so that interuptable sys-calls
won't be restarted, thus making Ctrl-c work more often.



Modified: pypy/dist/pypy/translator/c/src/signals.h
==============================================================================
--- pypy/dist/pypy/translator/c/src/signals.h	(original)
+++ pypy/dist/pypy/translator/c/src/signals.h	Thu Feb 22 18:08:12 2007
@@ -54,12 +54,30 @@
 
 void pypysig_ignore(int signum)
 {
+#ifdef SA_RESTART
+    /* assume sigaction exists */
+    struct sigaction context;
+    context.sa_handler = SIG_IGN;
+    sigemptyset(&context.sa_mask);
+    context.sa_flags = 0;
+    sigaction(signum, &context, NULL);
+#else
   signal(signum, SIG_IGN);
+#endif
 }
 
 void pypysig_default(int signum)
 {
+#ifdef SA_RESTART
+    /* assume sigaction exists */
+    struct sigaction context;
+    context.sa_handler = SIG_DFL;
+    sigemptyset(&context.sa_mask);
+    context.sa_flags = 0;
+    sigaction(signum, &context, NULL);
+#else
   signal(signum, SIG_DFL);
+#endif
 }
 
 static void signal_setflag_handler(int signum)
@@ -71,7 +89,16 @@
 
 void pypysig_setflag(int signum)
 {
+#ifdef SA_RESTART
+    /* assume sigaction exists */
+    struct sigaction context;
+    context.sa_handler = signal_setflag_handler;
+    sigemptyset(&context.sa_mask);
+    context.sa_flags = 0;
+    sigaction(signum, &context, NULL);
+#else
   signal(signum, signal_setflag_handler);
+#endif
 }
 
 int pypysig_poll(void)


More information about the pypy-svn mailing list