From: Dan Nicolaescu <dann@ics.uci.edu>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: trentbuck@gmail.com, 1058@emacsbugs.donarmstrong.com,
Romain Francoise <romain@orebokech.com>
Subject: bug#1058: 23.0.60; emacs --daemon should not return until socket is ready
Date: Tue, 14 Oct 2008 00:26:17 -0700 (PDT) [thread overview]
Message-ID: <200810140726.m9E7QHeb004332@mothra.ics.uci.edu> (raw)
In-Reply-To: <jwviqrwuxhp.fsf-monnier+emacsbugreports@gnu.org> (Stefan Monnier's message of "Mon, 13 Oct 2008 15:07:59 -0400")
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> >> > -(defun server-start (&optional leave-dead)
> >> > +(defun server-start (&optional leave-dead server-arg)
> >> > "Allow this Emacs process to be a server for client processes.
> >> > This starts a server communications subprocess through which
> >> > client \"editors\" can send your editing commands to this Emacs
> >> > @@ -463,6 +463,8 @@ kill any existing server communications
> >> > (when server-process
> >> > ;; kill it dead!
> >> > (ignore-errors (delete-process server-process)))
> >> > + (when (stringp server-arg)
> >> > + (setq server-name server-arg))
> >>
> >> Changing the global var like this is an ugly hack.
>
> > Sure, it can be moved before the call to `sever-start'
> > I also wanted to make that variable obsolete and make the functional
> > interface the preferred method.
>
> There's no need or reason to make it obsolete. You basically want to
> replace the last two lines above with
>
> (unless (stringp server-arg)
> (setq server-arg server-name))
>
> and then pass server-arg where it's needed.
Ah, OK. I had the impression that server-name was needed for other
functions to work correctly, but that is not the case.
Updated patch follows.
Now it's your choice if you want this patch now or later. I'll update
the docs when checking it in.
Index: lisp/server.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/server.el,v
retrieving revision 1.168
diff -u -3 -p -r1.168 server.el
--- lisp/server.el 24 Sep 2008 20:12:02 -0000 1.168
+++ lisp/server.el 14 Oct 2008 07:16:41 -0000
@@ -446,7 +446,7 @@ Creates the directory if necessary and m
(error "The directory %s is unsafe" dir))))
;;;###autoload
-(defun server-start (&optional leave-dead)
+(defun server-start (&optional leave-dead server-arg)
"Allow this Emacs process to be a server for client processes.
This starts a server communications subprocess through which
client \"editors\" can send your editing commands to this Emacs
@@ -463,9 +463,11 @@ kill any existing server communications
(when server-process
;; kill it dead!
(ignore-errors (delete-process server-process)))
+ (unless (stringp server-arg)
+ (setq server-arg server-name))
;; Delete the socket files made by previous server invocations.
(condition-case ()
- (delete-file (expand-file-name server-name server-socket-dir))
+ (delete-file (expand-file-name server-arg server-socket-dir))
(error nil))
;; If this Emacs already had a server, clear out associated status.
(while server-clients
@@ -476,7 +478,7 @@ kill any existing server communications
(server-log (message "Server stopped"))
(setq server-process nil))
(let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir))
- (server-file (expand-file-name server-name server-dir)))
+ (server-file (expand-file-name server-arg server-dir)))
;; Make sure there is a safe directory in which to place the socket.
(server-ensure-safe-dir server-dir)
;; Remove any leftover socket or authentication file.
@@ -491,7 +493,7 @@ kill any existing server communications
(add-hook 'kill-emacs-hook (lambda () (server-mode -1))) ;Cleanup upon exit.
(setq server-process
(apply #'make-network-process
- :name server-name
+ :name server-arg
:server t
:noquery t
:sentinel 'server-sentinel
Index: lisp/startup.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/startup.el,v
retrieving revision 1.513
diff -u -3 -p -r1.513 startup.el
--- lisp/startup.el 12 Oct 2008 16:59:01 -0000 1.513
+++ lisp/startup.el 14 Oct 2008 07:16:41 -0000
@@ -1212,8 +1212,8 @@ the `--debug-init' option to view a comp
;; This is done after loading the user's init file and after
;; processing all command line arguments to allow e.g. `server-name'
;; to be changed before the server starts.
- (when (daemonp)
- (server-start))
+ (let ((dn (daemonp)))
+ (when dn (server-start nil dn)))
;; Run emacs-session-restore (session management) if started by
;; the session manager and we have a session manager connection.
Index: src/emacs.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/emacs.c,v
retrieving revision 1.448
diff -u -3 -p -r1.448 emacs.c
--- src/emacs.c 6 Oct 2008 16:16:56 -0000 1.448
+++ src/emacs.c 14 Oct 2008 07:16:41 -0000
@@ -237,6 +237,8 @@ int noninteractive1;
/* Nonzero means Emacs was started as a daemon. */
int is_daemon = 0;
+/* Name for the server started by the daemon.*/
+static char *daemon_name;
/* Save argv and argc. */
char **initial_argv;
@@ -792,6 +794,7 @@ main (int argc, char **argv)
#endif
int no_loadup = 0;
char *junk = 0;
+ char *dname_arg = 0;
#if GC_MARK_STACK
extern Lisp_Object *stack_base;
@@ -1074,8 +1077,8 @@ main (int argc, char **argv)
printf (USAGE4, bug_reporting_address ());
exit (0);
}
-
- if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args))
+ if (argmatch (argv, argc, "-daemon", "--daemon", 5, NULL, &skip_args)
+ || argmatch (argv, argc, "-daemon", "--daemon", 5, &dname_arg, &skip_args))
{
#ifndef DOS_NT
pid_t f = fork ();
@@ -1088,6 +1091,8 @@ main (int argc, char **argv)
exit (1);
}
+ if (dname_arg)
+ daemon_name = xstrdup (dname_arg);
nfd = open ("/dev/null", O_RDWR);
dup2 (nfd, 0);
dup2 (nfd, 1);
@@ -2387,10 +2392,17 @@ decode_env_path (evarname, defalt)
}
DEFUN ("daemonp", Fdaemonp, Sdaemonp, 0, 0, 0,
- doc: /* Return t if the current emacs process is a daemon. */)
+ doc: /* Return non-nil if the current emacs process is a daemon.
+If the daemon was give a name argument, return that name. */)
()
{
- return is_daemon ? Qt : Qnil;
+ if (is_daemon)
+ if (daemon_name)
+ return build_string (daemon_name);
+ else
+ return Qt;
+ else
+ return Qnil;
}
void
next prev parent reply other threads:[~2008-10-14 7:26 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-30 13:43 bug#1058: 23.0.60; emacs --daemon should not return until socket is ready SRS0+wOMF+22+gmail.com=trentbuck
2008-10-01 16:51 ` Dan Nicolaescu
2008-10-01 19:39 ` Romain Francoise
2008-10-01 20:19 ` Andreas Schwab
2008-10-02 6:05 ` Romain Francoise
2008-10-01 23:32 ` Dan Nicolaescu
2008-10-02 6:07 ` Romain Francoise
2008-10-02 8:14 ` Dan Nicolaescu
2008-10-02 12:38 ` Stefan Monnier
2008-10-02 17:26 ` Dan Nicolaescu
2008-10-02 21:32 ` Stefan Monnier
2008-10-02 22:34 ` Dan Nicolaescu
2008-10-02 22:46 ` Trent W. Buck
2008-10-03 1:12 ` Stefan Monnier
2008-10-03 4:52 ` Dan Nicolaescu
2008-10-03 13:00 ` Stefan Monnier
2008-10-03 17:44 ` Dan Nicolaescu
2008-10-13 2:03 ` Dan Nicolaescu
2008-10-13 15:16 ` Stefan Monnier
2008-10-13 17:01 ` Dan Nicolaescu
2008-10-13 19:07 ` Stefan Monnier
2008-10-14 7:26 ` Dan Nicolaescu [this message]
2008-10-27 7:04 ` Dan Nicolaescu
2008-10-02 22:42 ` Trent W. Buck
2008-10-02 17:54 ` Romain Francoise
2008-10-02 18:40 ` Dan Nicolaescu
2008-10-06 20:59 ` Dan Nicolaescu
2008-10-07 14:26 ` Stefan Monnier
2008-10-07 15:31 ` Dan Nicolaescu
2008-10-07 23:13 ` Trent W. Buck
2008-10-08 2:03 ` Stefan Monnier
2008-10-08 2:25 ` Stefan Monnier
2008-10-07 18:45 ` Romain Francoise
2008-10-07 19:01 ` Dan Nicolaescu
2008-10-26 19:24 ` Dan Nicolaescu
2008-10-02 0:50 ` Trent W. Buck
2008-10-02 0:43 ` Trent W. Buck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200810140726.m9E7QHeb004332@mothra.ics.uci.edu \
--to=dann@ics.uci.edu \
--cc=1058@emacsbugs.donarmstrong.com \
--cc=monnier@iro.umontreal.ca \
--cc=romain@orebokech.com \
--cc=trentbuck@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).