logging: Close unix socket /tmp/ctdb.socket in syslogd process
authorAmitay Isaacs <amitay@gmail.com>
Tue, 14 Aug 2012 05:42:12 +0000 (15:42 +1000)
committerMartin Schwenke <martin@meltin.net>
Tue, 21 Aug 2012 04:33:09 +0000 (14:33 +1000)
Since the unix socket is opened before syslogd process is forked, syslogd
process also keeps listening to it.  If main ctdbd process dies and has any
child processes that are blocked waiting for locks, these child processes
keep connecting to unix socket and thus syslogd cannot exit.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
server/ctdb_logging.c

index 27b990ef6768b09967b4e8139f0bbf19f9d1f5d8..2637ad7567ec7ec3279aff3c2ed559aa54be3945 100644 (file)
@@ -117,6 +117,11 @@ int start_syslog_daemon(struct ctdb_context *ctdb)
        }
 
        debug_extra = talloc_asprintf(NULL, "syslogd:");
+
+       /* Close unix socket since syslogd does not need it */
+       close(ctdb->daemon.sd);
+       ctdb->daemon.sd = -1;
+
        talloc_free(ctdb->ev);
        ctdb->ev = event_context_init(NULL);
        tevent_loop_allow_nesting(ctdb->ev);