+ /*
+ * Signal handlers that make system calls must save a copy of errno on
+ * entry to the handler and restore it on exit, to prevent the
+ * possibility of overwriting a errno value that had previously been
+ * set in the main program.
+ */
+ int save_errno = errno;
+ ssize_t ret = write(signal_pipe[1], &s, sizeof(int));
+
+ if (ret == sizeof(int)) {
+ errno = save_errno;
+ return;
+ }
+ if (ret < 0)
+ DSS_EMERG_LOG(("%s\n", strerror(errno)));
+ else
+ DSS_EMERG_LOG(("short write to signal pipe\n"));
+ exit(EXIT_FAILURE);