diff --git a/client.c b/client.c index 96db6020..9826d050 100644 --- a/client.c +++ b/client.c @@ -1,4 +1,4 @@ -/* $Id: client.c,v 1.86 2009-11-08 23:07:14 tcunha Exp $ */ +/* $Id: client.c,v 1.87 2009-11-10 23:28:53 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -37,6 +37,7 @@ struct imsgbuf client_ibuf; struct event client_event; const char *client_exitmsg; +int client_exitval; void client_send_identify(int); void client_send_environ(void); @@ -215,17 +216,14 @@ client_main(void) goto out; /* Set the event and dispatch. */ - client_update_event(); + client_update_event(); event_dispatch(); out: /* Print the exit message, if any, and exit. */ - if (client_exitmsg != NULL) { - if (!login_shell) - printf("[%s]\n", client_exitmsg); - exit(1); - } - exit(0); + if (client_exitmsg != NULL && !login_shell) + printf("[%s]\n", client_exitmsg); + exit(client_exitval); } void @@ -236,6 +234,7 @@ client_signal(int sig, unused short events, unused void *data) switch (sig) { case SIGTERM: client_exitmsg = "terminated"; + client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; case SIGWINCH: @@ -279,6 +278,7 @@ client_callback(unused int fd, short events, unused void *data) lost_server: client_exitmsg = "lost server"; + client_exitval = 1; event_loopexit(NULL); } @@ -325,6 +325,7 @@ client_dispatch(void) client_write_server(MSG_EXITING, NULL, 0); client_exitmsg = "server exited"; + client_exitval = 1; break; case MSG_SUSPEND: if (datalen != 0)