]> git.proxmox.com Git - mirror_corosync.git/commitdiff
Move qb_loop creation after daemonization v2.2.0
authorJan Friesse <jfriesse@redhat.com>
Wed, 12 Dec 2012 08:25:18 +0000 (09:25 +0100)
committerJan Friesse <jfriesse@redhat.com>
Wed, 12 Dec 2012 10:47:42 +0000 (11:47 +0100)
Creating qb_loop before daemonization is not problem for poll or epoll
type loops, but it's problem for kqueue, because kqueue is not shared
in child with parent after fork.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
exec/main.c

index abd8fbda895db46f5d324a4d409c768932f77846..6a5dc45c29df96fc70fa7ab8c87cbb8065040524 100644 (file)
@@ -1088,16 +1088,9 @@ int main (int argc, char **argv, char **envp)
        log_printf (LOGSYS_LEVEL_NOTICE, "Corosync Cluster Engine ('%s'): started and ready to provide service.", VERSION);
        log_printf (LOGSYS_LEVEL_INFO, "Corosync built-in features:" PACKAGE_FEATURES "");
 
-       corosync_poll_handle = qb_loop_create ();
-
-       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_LOW,
-               SIGUSR2, NULL, sig_diag_handler, NULL);
-       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_HIGH,
-               SIGINT, NULL, sig_exit_handler, NULL);
-       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_HIGH,
-               SIGQUIT, NULL, sig_exit_handler, NULL);
-       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_HIGH,
-               SIGTERM, NULL, sig_exit_handler, NULL);
+       /*
+        * Other signals are registered later via qb_loop_signal_add
+        */
        (void)signal (SIGSEGV, sigsegv_handler);
        (void)signal (SIGABRT, sigabrt_handler);
 #if MSG_NOSIGNAL != 0
@@ -1199,6 +1192,18 @@ int main (int argc, char **argv, char **envp)
        if (background) {
                corosync_tty_detach ();
        }
+
+       corosync_poll_handle = qb_loop_create ();
+
+       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_LOW,
+               SIGUSR2, NULL, sig_diag_handler, NULL);
+       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_HIGH,
+               SIGINT, NULL, sig_exit_handler, NULL);
+       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_HIGH,
+               SIGQUIT, NULL, sig_exit_handler, NULL);
+       qb_loop_signal_add(corosync_poll_handle, QB_LOOP_HIGH,
+               SIGTERM, NULL, sig_exit_handler, NULL);
+
        if (logsys_thread_start() != 0) {
                log_printf (LOGSYS_LEVEL_ERROR, "Can't initialize log thread");
                corosync_exit_error (COROSYNC_DONE_LOGCONFIGREAD);