=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server.c,v retrieving revision 1.85 retrieving revision 1.86 diff -u -r1.85 -r1.86 --- src/usr.bin/tmux/server.c 2010/04/06 21:35:44 1.85 +++ src/usr.bin/tmux/server.c 2010/05/03 16:06:32 1.86 @@ -1,4 +1,4 @@ -/* $OpenBSD: server.c,v 1.85 2010/04/06 21:35:44 nicm Exp $ */ +/* $OpenBSD: server.c,v 1.86 2010/05/03 16:06:32 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -49,9 +49,6 @@ int server_fd; int server_shutdown; struct event server_ev_accept; -struct event server_ev_sigterm; -struct event server_ev_sigusr1; -struct event server_ev_sigchld; struct event server_ev_second; int server_create_socket(void); @@ -134,6 +131,12 @@ } close(pair[0]); + /* event_init() was called by the parent, need to reinit. */ + if (event_reinit(ev_base) != 0) + fatal("event_reinit failed"); + + clear_signals(); + /* * Must daemonise before loading configuration as the PID changes so * $TMUX would be wrong for sessions created in the config file. @@ -162,8 +165,6 @@ log_debug("socket path %s", socket_path); setproctitle("server (%s)", rpathbuf); - event_init(); - server_fd = server_create_socket(); server_client_create(pair[1]); @@ -202,7 +203,7 @@ evtimer_set(&server_ev_second, server_second_callback, NULL); evtimer_add(&server_ev_second, &tv); - server_signal_set(); + set_signals(server_signal_callback); server_loop(); exit(0); } @@ -339,61 +340,6 @@ return; } server_client_create(newfd); -} - -/* Set up server signal handling. */ -void -server_signal_set(void) -{ - struct sigaction sigact; - - memset(&sigact, 0, sizeof sigact); - sigemptyset(&sigact.sa_mask); - sigact.sa_flags = SA_RESTART; - sigact.sa_handler = SIG_IGN; - if (sigaction(SIGINT, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGPIPE, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGUSR2, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGTSTP, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGHUP, &sigact, NULL) != 0) - fatal("sigaction failed"); - - signal_set(&server_ev_sigchld, SIGCHLD, server_signal_callback, NULL); - signal_add(&server_ev_sigchld, NULL); - signal_set(&server_ev_sigterm, SIGTERM, server_signal_callback, NULL); - signal_add(&server_ev_sigterm, NULL); - signal_set(&server_ev_sigusr1, SIGUSR1, server_signal_callback, NULL); - signal_add(&server_ev_sigusr1, NULL); -} - -/* Destroy server signal events. */ -void -server_signal_clear(void) -{ - struct sigaction sigact; - - memset(&sigact, 0, sizeof sigact); - sigemptyset(&sigact.sa_mask); - sigact.sa_flags = SA_RESTART; - sigact.sa_handler = SIG_DFL; - if (sigaction(SIGINT, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGPIPE, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGUSR2, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGTSTP, &sigact, NULL) != 0) - fatal("sigaction failed"); - if (sigaction(SIGHUP, &sigact, NULL) != 0) - fatal("sigaction failed"); - - signal_del(&server_ev_sigchld); - signal_del(&server_ev_sigterm); - signal_del(&server_ev_sigusr1); } /* Signal handler. */