changeset 100485:fd10c7ef5447

* 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.
author Dan Nicolaescu <dann@ics.uci.edu>
date Thu, 18 Dec 2008 08:48:26 +0000
parents 023acf8058b5
children 1043d1f4aa3e
files lib-src/ChangeLog lib-src/emacsclient.c lisp/ChangeLog lisp/startup.el src/ChangeLog src/emacs.c
diffstat 6 files changed, 38 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lib-src/ChangeLog	Thu Dec 18 08:30:41 2008 +0000
+++ b/lib-src/ChangeLog	Thu Dec 18 08:48:26 2008 +0000
@@ -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.
--- a/lib-src/emacsclient.c	Thu Dec 18 08:30:41 2008 +0000
+++ b/lib-src/emacsclient.c	Thu Dec 18 08:48:26 2008 +0000
@@ -1433,23 +1433,31 @@
 #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
--- a/lisp/ChangeLog	Thu Dec 18 08:30:41 2008 +0000
+++ b/lisp/ChangeLog	Thu Dec 18 08:48:26 2008 +0000
@@ -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.
 
--- a/lisp/startup.el	Thu Dec 18 08:30:41 2008 +0000
+++ b/lisp/startup.el	Thu Dec 18 08:48:26 2008 +0000
@@ -1223,7 +1223,11 @@
       (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
--- a/src/ChangeLog	Thu Dec 18 08:30:41 2008 +0000
+++ b/src/ChangeLog	Thu Dec 18 08:48:26 2008 +0000
@@ -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.
--- a/src/emacs.c	Thu Dec 18 08:30:41 2008 +0000
+++ b/src/emacs.c	Thu Dec 18 08:48:26 2008 +0000
@@ -1129,6 +1129,11 @@
 	      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);