mirror of
https://github.com/tmux/tmux.git
synced 2024-12-24 10:08:48 +00:00
Use an enum for client exit reasons, from George Nachman.
This commit is contained in:
parent
0f9e0d1cfe
commit
d3e432069b
57
client.c
57
client.c
@ -35,7 +35,16 @@
|
|||||||
|
|
||||||
struct imsgbuf client_ibuf;
|
struct imsgbuf client_ibuf;
|
||||||
struct event client_event;
|
struct event client_event;
|
||||||
const char *client_exitmsg;
|
enum {
|
||||||
|
CLIENT_EXIT_NONE,
|
||||||
|
CLIENT_EXIT_DETACHED,
|
||||||
|
CLIENT_EXIT_DETACHED_HUP,
|
||||||
|
CLIENT_EXIT_LOST_TTY,
|
||||||
|
CLIENT_EXIT_TERMINATED,
|
||||||
|
CLIENT_EXIT_LOST_SERVER,
|
||||||
|
CLIENT_EXIT_EXITED,
|
||||||
|
CLIENT_EXIT_SERVER_EXITED,
|
||||||
|
} client_exitreason = CLIENT_EXIT_NONE;
|
||||||
int client_exitval;
|
int client_exitval;
|
||||||
enum msgtype client_exittype;
|
enum msgtype client_exittype;
|
||||||
int client_attached;
|
int client_attached;
|
||||||
@ -121,6 +130,31 @@ failed:
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get exit string from reason number. */
|
||||||
|
const char *
|
||||||
|
client_exit_message(void)
|
||||||
|
{
|
||||||
|
switch (client_exitreason) {
|
||||||
|
case CLIENT_EXIT_NONE:
|
||||||
|
break;
|
||||||
|
case CLIENT_EXIT_DETACHED:
|
||||||
|
return ("detached");
|
||||||
|
case CLIENT_EXIT_DETACHED_HUP:
|
||||||
|
return ("detached and SIGHUP");
|
||||||
|
case CLIENT_EXIT_LOST_TTY:
|
||||||
|
return ("lost tty");
|
||||||
|
case CLIENT_EXIT_TERMINATED:
|
||||||
|
return ("terminated");
|
||||||
|
case CLIENT_EXIT_LOST_SERVER:
|
||||||
|
return ("lost server");
|
||||||
|
case CLIENT_EXIT_EXITED:
|
||||||
|
return ("exited");
|
||||||
|
case CLIENT_EXIT_SERVER_EXITED:
|
||||||
|
return ("server exited");
|
||||||
|
}
|
||||||
|
return ("unknown reason");
|
||||||
|
}
|
||||||
|
|
||||||
/* Client main loop. */
|
/* Client main loop. */
|
||||||
int
|
int
|
||||||
client_main(int argc, char **argv, int flags)
|
client_main(int argc, char **argv, int flags)
|
||||||
@ -170,7 +204,8 @@ client_main(int argc, char **argv, int flags)
|
|||||||
* if the socket path matches $TMUX, this is probably the same server.
|
* if the socket path matches $TMUX, this is probably the same server.
|
||||||
*/
|
*/
|
||||||
if (shell_cmd == NULL && environ_path != NULL &&
|
if (shell_cmd == NULL && environ_path != NULL &&
|
||||||
cmdflags & CMD_CANTNEST && strcmp(socket_path, environ_path) == 0) {
|
(cmdflags & CMD_CANTNEST) &&
|
||||||
|
strcmp(socket_path, environ_path) == 0) {
|
||||||
log_warnx("sessions should be nested with care. "
|
log_warnx("sessions should be nested with care. "
|
||||||
"unset $TMUX to force.");
|
"unset $TMUX to force.");
|
||||||
return (1);
|
return (1);
|
||||||
@ -223,8 +258,8 @@ client_main(int argc, char **argv, int flags)
|
|||||||
|
|
||||||
/* Print the exit message, if any, and exit. */
|
/* Print the exit message, if any, and exit. */
|
||||||
if (client_attached) {
|
if (client_attached) {
|
||||||
if (client_exitmsg != NULL && !login_shell)
|
if (client_exitreason != CLIENT_EXIT_NONE && !login_shell)
|
||||||
printf("[%s]\n", client_exitmsg);
|
printf("[%s]\n", client_exit_message());
|
||||||
|
|
||||||
ppid = getppid();
|
ppid = getppid();
|
||||||
if (client_exittype == MSG_DETACHKILL && ppid > 1)
|
if (client_exittype == MSG_DETACHKILL && ppid > 1)
|
||||||
@ -323,12 +358,12 @@ client_signal(int sig, unused short events, unused void *data)
|
|||||||
} else {
|
} else {
|
||||||
switch (sig) {
|
switch (sig) {
|
||||||
case SIGHUP:
|
case SIGHUP:
|
||||||
client_exitmsg = "lost tty";
|
client_exitreason = CLIENT_EXIT_LOST_TTY;
|
||||||
client_exitval = 1;
|
client_exitval = 1;
|
||||||
client_write_server(MSG_EXITING, NULL, 0);
|
client_write_server(MSG_EXITING, NULL, 0);
|
||||||
break;
|
break;
|
||||||
case SIGTERM:
|
case SIGTERM:
|
||||||
client_exitmsg = "terminated";
|
client_exitreason = CLIENT_EXIT_TERMINATED;
|
||||||
client_exitval = 1;
|
client_exitval = 1;
|
||||||
client_write_server(MSG_EXITING, NULL, 0);
|
client_write_server(MSG_EXITING, NULL, 0);
|
||||||
break;
|
break;
|
||||||
@ -380,7 +415,7 @@ client_callback(unused int fd, short events, void *data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
lost_server:
|
lost_server:
|
||||||
client_exitmsg = "lost server";
|
client_exitreason = CLIENT_EXIT_LOST_SERVER;
|
||||||
client_exitval = 1;
|
client_exitval = 1;
|
||||||
event_loopexit(NULL);
|
event_loopexit(NULL);
|
||||||
}
|
}
|
||||||
@ -477,9 +512,9 @@ client_dispatch_attached(void)
|
|||||||
|
|
||||||
client_exittype = imsg.hdr.type;
|
client_exittype = imsg.hdr.type;
|
||||||
if (imsg.hdr.type == MSG_DETACHKILL)
|
if (imsg.hdr.type == MSG_DETACHKILL)
|
||||||
client_exitmsg = "detached and SIGHUP";
|
client_exitreason = CLIENT_EXIT_DETACHED_HUP;
|
||||||
else
|
else
|
||||||
client_exitmsg = "detached";
|
client_exitreason = CLIENT_EXIT_DETACHED;
|
||||||
client_write_server(MSG_EXITING, NULL, 0);
|
client_write_server(MSG_EXITING, NULL, 0);
|
||||||
break;
|
break;
|
||||||
case MSG_EXIT:
|
case MSG_EXIT:
|
||||||
@ -488,7 +523,7 @@ client_dispatch_attached(void)
|
|||||||
fatalx("bad MSG_EXIT size");
|
fatalx("bad MSG_EXIT size");
|
||||||
|
|
||||||
client_write_server(MSG_EXITING, NULL, 0);
|
client_write_server(MSG_EXITING, NULL, 0);
|
||||||
client_exitmsg = "exited";
|
client_exitreason = CLIENT_EXIT_EXITED;
|
||||||
break;
|
break;
|
||||||
case MSG_EXITED:
|
case MSG_EXITED:
|
||||||
if (datalen != 0)
|
if (datalen != 0)
|
||||||
@ -501,7 +536,7 @@ client_dispatch_attached(void)
|
|||||||
fatalx("bad MSG_SHUTDOWN size");
|
fatalx("bad MSG_SHUTDOWN size");
|
||||||
|
|
||||||
client_write_server(MSG_EXITING, NULL, 0);
|
client_write_server(MSG_EXITING, NULL, 0);
|
||||||
client_exitmsg = "server exited";
|
client_exitreason = CLIENT_EXIT_SERVER_EXITED;
|
||||||
client_exitval = 1;
|
client_exitval = 1;
|
||||||
break;
|
break;
|
||||||
case MSG_SUSPEND:
|
case MSG_SUSPEND:
|
||||||
|
Loading…
Reference in New Issue
Block a user