X-Git-Url: http://nitlanguage.org diff --git a/lib/signals.nit b/lib/signals.nit index 8422833..6fd06d0 100644 --- a/lib/signals.nit +++ b/lib/signals.nit @@ -64,6 +64,7 @@ module signals #define _POSIX_SOURCE 1 #include #include + #include /* */ @@ -78,7 +79,7 @@ module signals char raised; /* !=0 if has been raised */ void* handler; /* instance to receive call */ char safely; /* if !=0 then manage signal safely, otherwise react when raised */ - } nit_signals_list[32] = {0x0}; + } nit_signals_list[32] = {{0}}; /* Receiver to all signals If unsafe, it calls directly the Nit receiver, @@ -141,7 +142,6 @@ interface SignalHandler # otherwise the receiver is invoked when the signal is raised, it may # crash the Nit system but is unavoidable for unstoppable signals. fun handle_signal(signal: Int, safely: Bool) import receive_signal `{ - SignalHandler last_handler; if (signal < 32 && signal >=0) { struct sigaction act; sigemptyset(&act.sa_mask); @@ -150,21 +150,26 @@ interface SignalHandler sigaction(signal, &act, NULL); - last_handler = (SignalHandler)nit_signals_list[signal].handler; + #ifdef SignalHandler_decr_ref + SignalHandler last_handler = (SignalHandler)nit_signals_list[signal].handler; if (last_handler != NULL) SignalHandler_decr_ref(last_handler); + #endif nit_signals_list[signal].handler = self; + + #ifdef SignalHandler_incr_ref SignalHandler_incr_ref(self); + #endif nit_signals_list[signal].safely = safely; + nit_SignalHandler_receive_signal = SignalHandler_receive_signal; } `} # Set to ignore the signal fun ignore_signal(signal: Int) `{ - SignalHandler last_handler; if (signal < 32 && signal >=0) { struct sigaction act; sigemptyset(&act.sa_mask); @@ -172,15 +177,16 @@ interface SignalHandler act.sa_handler = SIG_IGN; sigaction(signal, &act, NULL); - last_handler = (SignalHandler)nit_signals_list[signal].handler; + #ifdef SignalHandler_decr_ref + SignalHandler last_handler = (SignalHandler)nit_signals_list[signal].handler; if (last_handler != NULL) SignalHandler_decr_ref(last_handler); + #endif } `} # Set default action for the signal fun default_signal(signal: Int) `{ - SignalHandler last_handler; if (signal < 32 && signal >=0) { struct sigaction act; sigemptyset(&act.sa_mask); @@ -188,9 +194,11 @@ interface SignalHandler act.sa_handler = SIG_DFL; sigaction(signal, &act, NULL); - last_handler = (SignalHandler)nit_signals_list[signal].handler; + #ifdef SignalHandler_decr_ref + SignalHandler last_handler = (SignalHandler)nit_signals_list[signal].handler; if (last_handler != NULL) SignalHandler_decr_ref(last_handler); + #endif } `} end