[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