* emacs.c (main): Print and error and exit when no data is read
authorDan Nicolaescu <dann@ics.uci.edu>
Thu, 18 Dec 2008 08:48:26 +0000 (08:48 +0000)
committerDan Nicolaescu <dann@ics.uci.edu>
Thu, 18 Dec 2008 08:48:26 +0000 (08:48 +0000)
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.

lib-src/ChangeLog
lib-src/emacsclient.c
lisp/ChangeLog
lisp/startup.el
src/ChangeLog
src/emacs.c

index 16d70d4..b72487d 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-18  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * emacsclient.c (start_daemon_and_retry_set_socket): Improve error
+       checking.
+
 2008-12-14  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * emacsclient.c: Include syswait.h instead of sys/types.h.
index 2f18fee..22b5273 100644 (file)
@@ -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
index 9adef56..0c06b01 100644 (file)
@@ -1,5 +1,8 @@
 2008-12-18  Dan Nicolaescu  <dann@ics.uci.edu>
 
+       * 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.
 
index 2fa1a6c..6dc958c 100644 (file)
@@ -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
index 8177bea..ccda628 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-18  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * emacs.c (main): Print and error and exit when no data is read
+       from the pipe.
+
 2008-12-17  Jason Rumney  <jasonr@gnu.org>
 
        * w32font.c (w32font_has_char): Always return -1.
index bd733da..4ebf136 100644 (file)
@@ -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);