summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/config.h5
-rw-r--r--src/redis.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/src/config.h b/src/config.h
index 1f2919ed2..2b5004baa 100644
--- a/src/config.h
+++ b/src/config.h
@@ -61,6 +61,11 @@
#define HAVE_BACKTRACE 1
#endif
+/* MSG_NOSIGNAL. */
+#ifdef __linux__
+#define HAVE_MSG_NOSIGNAL 1
+#endif
+
/* Test for polling API */
#ifdef __linux__
#define HAVE_EPOLL 1
diff --git a/src/redis.c b/src/redis.c
index 45140139c..030cfbb48 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -3586,6 +3586,7 @@ int redisIsSupervised(void) {
struct sockaddr_un su;
struct iovec iov;
struct msghdr hdr;
+ int sendto_flags = 0;
if (upstart_job == NULL && notify_socket == NULL)
return 0;
@@ -3631,8 +3632,11 @@ int redisIsSupervised(void) {
hdr.msg_iovlen = 1;
unsetenv("NOTIFY_SOCKET");
- if (sendmsg(fd, &hdr, MSG_NOSIGNAL) < 0) {
- redisLog(REDIS_WARNING, "cannot send notification to systemd");
+#ifdef HAVE_MSG_NOSIGNAL
+ sendto_flags |= MSG_NOSIGNAL;
+#endif
+ if (sendmsg(fd, &hdr, sendto_flags) < 0) {
+ redisLog(REDIS_WARNING, "Cannot send notification to systemd");
close(fd);
return 0;
}