--- 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;
}