summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2015-11-24 22:45:44 +0000
committernicm <nicm>2015-11-24 22:45:44 +0000
commit73e30cbda8ade3a1c7ba3b771a911545826f76b7 (patch)
treef08e117d864e25c4878bda31ef0ce8607f05317c
parentc18fbefe93dfbc7525b27e0129f8a0e8e9b70117 (diff)
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.
-rw-r--r--client.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/client.c b/client.c
index 595aff9b..5fdfd029 100644
--- a/client.c
+++ b/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);