- libs/ezsat/ezminisat.cc: use POSIX.2001 sigaction() instead on non-portable signal().
authorSiesh1oo <siesh1oo@siesh1oo.no>
Mon, 10 Mar 2014 14:02:58 +0000 (15:02 +0100)
committerSiesh1oo <siesh1oo@siesh1oo.no>
Mon, 10 Mar 2014 14:02:58 +0000 (15:02 +0100)
libs/ezsat/ezminisat.cc

index d488a90623d6f21d5cee307c7c75553180ac9d2e..92f56b00ab7a8be9c874e8758c68db6942eb7ab1 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <limits.h>
 #include <stdint.h>
-#include <signal.h>
+#include <csignal>
 #include <cinttypes>
 
 #include <minisat/core/Solver.h>
@@ -170,14 +170,18 @@ contradiction:
 #endif
        }
 
-       sighandler_t old_alarm_sighandler = NULL;
+       struct sigaction sig_action;
+       struct sigaction old_sig_action;
        int old_alarm_timeout = 0;
 
        if (solverTimeout > 0) {
+               sig_action.sa_handler = alarmHandler;
+               sig_action.sa_mask = 0;
+               sig_action.sa_flags = 0;
                alarmHandlerThis = this;
                alarmHandlerTimeout = clock() + solverTimeout*CLOCKS_PER_SEC;
                old_alarm_timeout = alarm(0);
-               old_alarm_sighandler = signal(SIGALRM, alarmHandler);
+               sigaction(SIGALRM, &sig_action, &old_sig_action);
                alarm(1);
        }
 
@@ -187,7 +191,7 @@ contradiction:
                if (alarmHandlerTimeout == 0)
                        solverTimoutStatus = true;
                alarm(0);
-               signal(SIGALRM, old_alarm_sighandler);
+               sigaction(SIGALRM, &old_sig_action, NULL);
                alarm(old_alarm_timeout);
        }