From: Dan Nicolaescu Date: Thu, 18 Dec 2008 08:48:26 +0000 (+0000) Subject: * emacs.c (main): Print and error and exit when no data is read X-Git-Tag: emacs-pretest-23.0.90~1039 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fd95644b937fb3e6e1285b21c2fc1ab901199e87;p=emacs.git * emacs.c (main): Print and error and exit when no data is read from the pipe. * startup.el (command-line): Do not mention the server name in case the user has not mentioned it, print a more explicit message. * emacsclient.c (start_daemon_and_retry_set_socket): Improve error checking. --- diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 16d70d42973..b72487d22d8 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,8 @@ +2008-12-18 Dan Nicolaescu + + * emacsclient.c (start_daemon_and_retry_set_socket): Improve error + checking. + 2008-12-14 Dan Nicolaescu * emacsclient.c: Include syswait.h instead of sys/types.h. diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 2f18fee5047..22b5273f842 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -1433,23 +1433,31 @@ start_daemon_and_retry_set_socket (void) #ifndef WINDOWSNT pid_t dpid; int status; - pid_t p; dpid = fork (); if (dpid > 0) { - p = waitpid (dpid, &status, WUNTRACED | WCONTINUED); + pid_t w; + w = waitpid (dpid, &status, WUNTRACED | WCONTINUED); - /* Try connecting again, the daemon should have started by - now. */ - message (TRUE, "daemon should have started, trying to connect again\n", dpid); + if ((w == -1) || !WIFEXITED (status) || WEXITSTATUS(status)) + { + message (TRUE, "Error: Could not start the Emacs daemon\n"); + exit (EXIT_FAILURE); + } + + /* Try connecting, the daemon should have started by now. */ + message (TRUE, "Emacs daemon should have started, trying to connect again\n"); if ((emacs_socket = set_socket (1)) == INVALID_SOCKET) - message (TRUE, "Cannot connect even after starting the daemon\n"); + { + message (TRUE, "Error: Cannot connect even after starting the Emacs daemon\n"); + exit (EXIT_FAILURE); + } } else if (dpid < 0) { - fprintf (stderr, "Cannot fork!\n"); + fprintf (stderr, "Error: Cannot fork!\n"); exit (1); } else diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9adef563e0d..0c06b012fd6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2008-12-18 Dan Nicolaescu + * startup.el (command-line): Do not mention the server name in + case the user has not mentioned it, print a more explicit message. + * vc-dir.el (vc-dir-at-event): Rename from vc-at-event. Change all callers. diff --git a/lisp/startup.el b/lisp/startup.el index 2fa1a6c15cd..6dc958cae3d 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1223,7 +1223,11 @@ the `--debug-init' option to view a complete error backtrace." (server-start) (if server-process (daemon-initialized) - (message "Unable to start daemon: Emacs server named %S already running" server-name) + (if (stringp dn) + (message + "Unable to start daemon: Emacs server named %S already running" + server-name) + (message "Unable to start the daemon.\nAnother instance of Emacs is running the server, either as daemon or interactively.\nYou can use emacsclient to connect to that Emacs process.")) (kill-emacs 1)))) ;; Run emacs-session-restore (session management) if started by diff --git a/src/ChangeLog b/src/ChangeLog index 8177bea8a45..ccda62889f7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-12-18 Dan Nicolaescu + + * emacs.c (main): Print and error and exit when no data is read + from the pipe. + 2008-12-17 Jason Rumney * w32font.c (w32font_has_char): Always return -1. diff --git a/src/emacs.c b/src/emacs.c index bd733da303f..4ebf136063a 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -1129,6 +1129,11 @@ main (int argc, char **argv) fprintf (stderr, "Error reading status from child\n"); exit (1); } + else if (retval == 0) + { + fprintf (stderr, "Error: server did not start correctly\n"); + exit (1); + } close (daemon_pipe[0]); exit (0);