mirror of
https://github.com/tmux/tmux.git
synced 2025-01-14 12:48:56 +00:00
Actually show something (even if it not that helpful) if the server
fails to start (for example if it can't create the socket), rather than hanging or showing nothing.
This commit is contained in:
parent
c18fbefe93
commit
73e30cbda8
27
client.c
27
client.c
@ -76,8 +76,12 @@ client_get_lock(char *lockfile)
|
||||
{
|
||||
int lockfd;
|
||||
|
||||
if ((lockfd = open(lockfile, O_WRONLY|O_CREAT, 0600)) == -1)
|
||||
fatal("open failed");
|
||||
if ((lockfd = open(lockfile, O_WRONLY|O_CREAT, 0600)) == -1) {
|
||||
lockfd = open("/dev/null", O_WRONLY);
|
||||
if (lockfd == -1)
|
||||
fatal("open failed");
|
||||
return (lockfd);
|
||||
}
|
||||
log_debug("lock file is %s", lockfile);
|
||||
|
||||
if (flock(lockfd, LOCK_EX|LOCK_NB) == -1) {
|
||||
@ -114,10 +118,10 @@ client_connect(struct event_base *base, const char *path, int start_server)
|
||||
|
||||
retry:
|
||||
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
|
||||
fatal("socket failed");
|
||||
return (-1);
|
||||
|
||||
log_debug("trying connect");
|
||||
if (connect(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1) {
|
||||
if (connect(fd, (struct sockaddr *)&sa, sizeof sa) == -1) {
|
||||
log_debug("connect failed: %s", strerror(errno));
|
||||
if (errno != ECONNREFUSED && errno != ENOENT)
|
||||
goto failed;
|
||||
@ -255,6 +259,9 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
|
||||
cmd_list_free(cmdlist);
|
||||
}
|
||||
|
||||
/* Create client process structure (starts logging). */
|
||||
client_proc = proc_start("client", base, 0, client_signal);
|
||||
|
||||
/* Initialize the client socket and start the server. */
|
||||
fd = client_connect(base, socket_path, cmdflags & CMD_STARTSERVER);
|
||||
if (fd == -1) {
|
||||
@ -267,9 +274,6 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* Build process state. */
|
||||
client_proc = proc_start("client", base, 0, client_signal);
|
||||
client_peer = proc_add_peer(client_proc, fd, client_dispatch, NULL);
|
||||
|
||||
/* Save these before pledge(). */
|
||||
@ -365,7 +369,8 @@ client_main(struct event_base *base, int argc, char **argv, int flags)
|
||||
printf("%%exit\n");
|
||||
printf("\033\\");
|
||||
tcsetattr(STDOUT_FILENO, TCSAFLUSH, &saved_tio);
|
||||
}
|
||||
} else
|
||||
fprintf(stderr, "%s\n", client_exit_message());
|
||||
setblocking(STDIN_FILENO, 1);
|
||||
return (client_exitval);
|
||||
}
|
||||
@ -517,7 +522,11 @@ client_dispatch(struct imsg *imsg, __unused void *arg)
|
||||
if (imsg == NULL) {
|
||||
client_exitreason = CLIENT_EXIT_LOST_SERVER;
|
||||
client_exitval = 1;
|
||||
} else if (client_attached)
|
||||
proc_exit(client_proc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (client_attached)
|
||||
client_dispatch_attached(imsg);
|
||||
else
|
||||
client_dispatch_wait(imsg);
|
||||
|
Loading…
Reference in New Issue
Block a user