=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/tmux.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -r1.83 -r1.84 --- src/usr.bin/tmux/tmux.c 2010/06/28 22:10:42 1.83 +++ src/usr.bin/tmux/tmux.c 2010/07/11 17:06:45 1.84 @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.c,v 1.83 2010/06/28 22:10:42 nicm Exp $ */ +/* $OpenBSD: tmux.c,v 1.84 2010/07/11 17:06:45 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -61,7 +61,6 @@ __dead void shell_exec(const char *, const char *); struct imsgbuf *main_ibuf; -int main_exitval; void main_signal(int, short, unused void *); void main_callback(int, short, void *); @@ -548,7 +547,6 @@ events |= EV_WRITE; event_once(main_ibuf->fd, events, main_callback, shellcmd, NULL); - main_exitval = 0; event_dispatch(); clear_signals(); @@ -597,6 +595,7 @@ struct imsg imsg; ssize_t n, datalen; struct msg_shell_data shelldata; + struct msg_exit_data exitdata; if ((n = imsg_read(main_ibuf)) == -1 || n == 0) fatalx("imsg_read failed"); @@ -611,10 +610,13 @@ switch (imsg.hdr.type) { case MSG_EXIT: case MSG_SHUTDOWN: - if (datalen != 0) - fatalx("bad MSG_EXIT size"); - - exit(main_exitval); + if (datalen != sizeof exitdata) { + if (datalen != 0) + fatalx("bad MSG_EXIT size"); + exit(0); + } + memcpy(&exitdata, imsg.data, sizeof exitdata); + exit(exitdata.retcode); case MSG_READY: if (datalen != 0) fatalx("bad MSG_READY size");