=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server.c,v retrieving revision 1.85 retrieving revision 1.86 diff -c -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 **** ! /* $OpenBSD: server.c,v 1.85 2010/04/06 21:35:44 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.86 2010/05/03 16:06:32 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 49,57 **** 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); --- 49,54 ---- *************** *** 134,139 **** --- 131,142 ---- } 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,169 **** log_debug("socket path %s", socket_path); setproctitle("server (%s)", rpathbuf); - event_init(); - server_fd = server_create_socket(); server_client_create(pair[1]); --- 165,170 ---- *************** *** 202,208 **** evtimer_set(&server_ev_second, server_second_callback, NULL); evtimer_add(&server_ev_second, &tv); ! server_signal_set(); server_loop(); exit(0); } --- 203,209 ---- evtimer_set(&server_ev_second, server_second_callback, NULL); evtimer_add(&server_ev_second, &tv); ! set_signals(server_signal_callback); server_loop(); exit(0); } *************** *** 339,399 **** 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. */ --- 340,345 ----