aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2013-07-07 08:58:10 -0400
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2013-07-07 08:58:10 -0400
commit2376c18714fe197fbf56a19f8271e5f256ec7caf (patch)
tree82978fb44715a6f08c9cd4f09ad45fa586e169dd
parent88b8c03a11e229b29cd985cabe51cb2ed3c24b55 (diff)
downloadegawk-2376c18714fe197fbf56a19f8271e5f256ec7caf.tar.gz
egawk-2376c18714fe197fbf56a19f8271e5f256ec7caf.tar.bz2
egawk-2376c18714fe197fbf56a19f8271e5f256ec7caf.zip
In select extension, if lacking sigaction, reset signal handler each time a signal is trapped.
-rw-r--r--extension/ChangeLog6
-rw-r--r--extension/select.c9
2 files changed, 15 insertions, 0 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 4bfc64d4..244940ec 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,9 @@
+2013-07-07 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (signal_handler): On platforms lacking sigaction, reset
+ the signal handler each time a signal is trapped to protect in case
+ the system resets it to default.
+
2013-07-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
* select.c (signal_result): New function to set result string from
diff --git a/extension/select.c b/extension/select.c
index 3bcef166..072a562f 100644
--- a/extension/select.c
+++ b/extension/select.c
@@ -107,6 +107,15 @@ signal_handler(int signum)
*/
sigaddset(& caught.mask, signum);
caught.flag = 1;
+#ifndef HAVE_SIGACTION
+ /*
+ * On platforms without sigaction, we do not know how the legacy
+ * signal API will behave. There does not appear to be an autoconf
+ * test for whether the signal handler is reset to default each time
+ * a signal is trapped, so we do this to be safe.
+ */
+ signal(signum, signal_handler);
+#endif
}
static int