start the syslog child a little later, after we have forked and detached from the...
[samba.git] / ctdb / server / ctdb_logging.c
index 556a2489adce32371b331a5aed4d4936b25e06a2..a404cdf02e1792cff3f8dbb3c72d7c0077939f05 100644 (file)
@@ -25,6 +25,7 @@
 #include "system/time.h"
 #include "system/filesys.h"
 
+static bool syslogd_is_started;
 
 struct syslog_message {
        uint32_t level;
@@ -49,6 +50,8 @@ int start_syslog_daemon(struct ctdb_context *ctdb)
                return -1;
        }
 
+       syslogd_is_started = 1;
+
        if (child != 0) {
                return 0;
        }
@@ -153,22 +156,28 @@ static void ctdb_syslog_log(const char *format, va_list ap)
        msg->len   = strlen(s);
        strcpy(msg->message, s);
 
-       syslog_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-       if (syslog_fd == -1) {
-               printf("Failed to create syslog socket\n");
-               free(s);
-               free(msg);
-               return;
-       }
+       if (syslogd_is_started == 0) {
+               syslog(msg->level, "%s", msg->message);
+       } else {
+               syslog_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+               if (syslog_fd == -1) {
+                       printf("Failed to create syslog socket\n");
+                       free(s);
+                       free(msg);
+                       return;
+               }
 
-       syslog_sin.sin_family = AF_INET;
-       syslog_sin.sin_port   = htons(CTDB_PORT);
-       syslog_sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);    
+               syslog_sin.sin_family = AF_INET;
+               syslog_sin.sin_port   = htons(CTDB_PORT);
+               syslog_sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);    
+
+       
+               ret = sendto(syslog_fd, msg, len, 0, &syslog_sin, sizeof(syslog_sin));
+               /* no point in checking here since we cant log an error */
 
-       ret = sendto(syslog_fd, msg, len, 0, &syslog_sin, sizeof(syslog_sin));
-       /* no point in checking here since we cant log an error */
+               close(syslog_fd);
+       }
 
-       close(syslog_fd);
        free(s);
        free(msg);
 }