From 9cc14fc12a77633ee1cfe3815c89aeb13a04ee17 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Wed, 14 May 2014 14:53:32 -0400 Subject: [PATCH] lib/signals: improve doc and add nitunits (fix #175) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/signals.nit | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/lib/signals.nit b/lib/signals.nit index 7d67bc0..91015da 100644 --- a/lib/signals.nit +++ b/lib/signals.nit @@ -53,18 +53,49 @@ module signals # Receives the callback from system when a given signal arise interface SignalHandler - # Called on any signal received + # Invoked after a call to `check_signals` if a signal has been raised + # (should be redefed by subclasses) + # + # Should be used by most signals except `sigkill` and `sigstop` since they + # cannot be caught, blocked or ignored. + # + # class MyReceiver + # super SignalHandler + # + # redef fun receive_signal(signal) do print "received safely {signal}" + # end + # + # var r = new MyReceiver + # r.handle_signal(sigint, true) # will call back when "check_signals" is called + # # ... + # check_signals # if a signal was received, it will invoke `r.receive_signal` fun receive_signal(signal: Int) `{ `} - # Called on any unsafe signal received + # Called immediatly on receiving an unsafe signal (should be redefed by subclasses) + # + # Should be used for `sigkill` and `sigstop` since they cannot be caught, + # blocked or ignored. + # + # You should consider this methods as being fragile. It should be implemented in C + # and you should not do too much callbacks to Nit. + # + # class MyReceiver + # super SignalHandler + # + # redef fun receive_signal_unsafe(signal) do print "received unsafely {signal}" + # end + # + # var r = new MyReceiver + # r.handle_signal(sigsegv, false) # `r.receive_signal_unsafe` will be invoked on sigsegv fun receive_signal_unsafe(signal: Int) `{ `} # Set the receiver as the handler of the signal - # If safely, receiver will be called when check_signals in invoked - # otherwise the receiver is invoked when the signal is raised, it may - # crash the Nit system but is unavoidable for unstoppable signals + # + # If `safely`, receiver will be called when `check_signals` in invoked + # 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; -- 1.7.9.5