X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fsignal.c;h=c3bb718bfb5a274279eb6a1ae257163e573b5fc5;hb=a5750919060a5ca7a6367e1d95a68a852a555056;hp=c8d6e04cd4a2ea446b12f5da9d941a4f9fa26b9e;hpb=1d943b33c95c2d3f366d50e22e8b134029d5a579;p=oweals%2Fgnunet.git diff --git a/src/util/signal.c b/src/util/signal.c index c8d6e04cd..c3bb718bf 100644 --- a/src/util/signal.c +++ b/src/util/signal.c @@ -28,6 +28,9 @@ #include "gnunet_common.h" #include "gnunet_signal_lib.h" +#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) + + struct GNUNET_SIGNAL_Context { int sig; @@ -47,6 +50,7 @@ struct GNUNET_SIGNAL_Context * GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler) { struct GNUNET_SIGNAL_Context *ret; + #ifndef MINGW struct sigaction sig; #endif @@ -55,6 +59,7 @@ GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler) ret->sig = signum; ret->method = handler; #ifndef MINGW + memset (&sig, 0, sizeof (sig)); sig.sa_handler = (void *) handler; sigemptyset (&sig.sa_mask); #ifdef SA_INTERRUPT @@ -67,7 +72,15 @@ GNUNET_SIGNAL_handler_install (int signum, GNUNET_SIGNAL_Handler handler) if (signum == GNUNET_SIGCHLD) w32_sigchld_handler = handler; else - signal (signum, handler); + { + __p_sig_fn_t sigret = signal (signum, (__p_sig_fn_t) handler); + + if (sigret == SIG_ERR) + { + LOG (GNUNET_ERROR_TYPE_WARNING, _("signal (%d, %p) returned %d.\n"), + signum, handler, sigret); + } + } #endif return ret; }