hostnames = DEFAULT_COMMAND_SOCKET",127.0.0.1,::1";
}
- UTI_SetQuitSignalsHandler(signal_handler);
+ UTI_SetQuitSignalsHandler(signal_handler, 0);
sockaddrs = get_sockaddrs(hostnames, port);
/* From now on, it is safe to do finalisation on exit */
initialised = 1;
- UTI_SetQuitSignalsHandler(signal_cleanup);
+ UTI_SetQuitSignalsHandler(signal_cleanup, 1);
CAM_OpenUnixSocket();
}
/* ignore signals, the process will exit on OP_QUIT request */
- UTI_SetQuitSignalsHandler(SIG_IGN);
+ UTI_SetQuitSignalsHandler(SIG_IGN, 1);
helper_main(sock_pair[1]);
/* ================================================== */
void
-UTI_SetQuitSignalsHandler(void (*handler)(int))
+UTI_SetQuitSignalsHandler(void (*handler)(int), int ignore_sigpipe)
{
struct sigaction sa;
if (sigaction(SIGHUP, &sa, NULL) < 0)
LOG_FATAL("sigaction(%d) failed", SIGHUP);
#endif
+
+ if (ignore_sigpipe)
+ sa.sa_handler = SIG_IGN;
+
+ if (sigaction(SIGPIPE, &sa, NULL) < 0)
+ LOG_FATAL("sigaction(%d) failed", SIGPIPE);
}
/* ================================================== */
/* Set FD_CLOEXEC on descriptor */
extern int UTI_FdSetCloexec(int fd);
-extern void UTI_SetQuitSignalsHandler(void (*handler)(int));
+extern void UTI_SetQuitSignalsHandler(void (*handler)(int), int ignore_sigpipe);
/* Get directory (as an allocated string) for a path */
extern char *UTI_PathToDir(const char *path);