src/signals.c
changeset 71 0a13030f795d
parent 48 4841f4398fd2
child 109 bfe9b9a8fe5b
--- a/src/signals.c	Mon Mar 16 23:34:05 2009 +0200
+++ b/src/signals.c	Mon Mar 16 23:55:30 2009 +0200
@@ -82,26 +82,43 @@
     return SUCCESS;
 }
 
+err_t signal_ignore (int signum, struct error_info *err)
+{
+    struct sigaction act = {
+        .sa_handler     = SIG_IGN,
+    };
+    
+    // signall the handler
+    if (sigaction(signum, &act, NULL))
+        RETURN_SET_ERROR_ERRNO(err, ERR_SIGACTION);
+
+    // ok
+    return SUCCESS;
+}
+
 struct signals *signals_default (struct event_base *ev_base) 
 {
     struct signals *signals = NULL;
+    struct error_info err;
     
     // alloc signals
     if (signals_create(&signals, ev_base))
         return NULL;
     
     // add the set of default signals
-    if (    signals_add(signals,    SIGPIPE,    &signals_ignore,        signals)
-        ||  signals_add(signals,    SIGINT,     &signals_loopexit,      signals)
-    ) 
+    if (signal_ignore(SIGPIPE, &err))
+        log_err_info(&err, "signal_ignore(SIGPIPE)");
+
+    if ((ERROR_CODE(&err) = signals_add(signals, SIGINT, &signals_loopexit, signals))) {
+        log_err_info(&err, "signals_add(SIGINT)");
         goto error;
-    
+    }
+
     // ok
     return signals;
 
 error:
-    if (signals)
-        signals_free(signals);
+    signals_free(signals);
 
     return NULL;
 }