From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dan Nicolaescu Newsgroups: gmane.emacs.bugs 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) Message-ID: <200810140726.m9E7QHeb004332@mothra.ics.uci.edu> References: <1222782234_2281@mail.internode.on.net> <200810011651.m91GpAZQ010333@mothra.ics.uci.edu> <87k5csds03.fsf@elegiac.orebokech.com> <200810012332.m91NWJ4s014658@mothra.ics.uci.edu> <874p3vediy.fsf@elegiac.orebokech.com> <200810020814.m928Ed1C016380@mothra.ics.uci.edu> <200810021726.m92HQcTQ017644@mothra.ics.uci.edu> <200810022234.m92MYgYp018688@mothra.ics.uci.edu> <200810130203.m9D23eul000572@mothra.ics.uci.edu> <200810131701.m9DH1ItS002005@mothra.ics.uci.edu> Reply-To: Dan Nicolaescu , 1058@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1223970666 27805 80.91.229.12 (14 Oct 2008 07:51:06 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 14 Oct 2008 07:51:06 +0000 (UTC) Cc: trentbuck@gmail.com, 1058@emacsbugs.donarmstrong.com, Romain Francoise To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Oct 14 09:52:03 2008 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1Kpeh4-0003GF-40 for geb-bug-gnu-emacs@m.gmane.org; Tue, 14 Oct 2008 09:51:51 +0200 Original-Received: from localhost ([127.0.0.1]:43791 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kpefx-0001nd-SV for geb-bug-gnu-emacs@m.gmane.org; Tue, 14 Oct 2008 03:50:41 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KpefO-0001XV-2M for bug-gnu-emacs@gnu.org; Tue, 14 Oct 2008 03:50:06 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KpefL-0001Wc-GV for bug-gnu-emacs@gnu.org; Tue, 14 Oct 2008 03:50:05 -0400 Original-Received: from [199.232.76.173] (port=41493 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KpefL-0001WV-1l for bug-gnu-emacs@gnu.org; Tue, 14 Oct 2008 03:50:03 -0400 Original-Received: from mx20.gnu.org ([199.232.41.8]:45675) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KpefK-00014Y-C6 for bug-gnu-emacs@gnu.org; Tue, 14 Oct 2008 03:50:02 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KpefJ-0005Px-Ak for bug-gnu-emacs@gnu.org; Tue, 14 Oct 2008 03:50:01 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m9E7nxn8012363; Tue, 14 Oct 2008 00:49:59 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.13.8/8.13.8/Submit) id m9E7Z3v4008849; Tue, 14 Oct 2008 00:35:03 -0700 X-Loop: don@donarmstrong.com Resent-From: Dan Nicolaescu Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs Resent-Date: Tue, 14 Oct 2008 07:35:03 +0000 Resent-Message-ID: Resent-Sender: don@donarmstrong.com X-Emacs-PR-Message: report 1058 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by 1058-submit@emacsbugs.donarmstrong.com id=B1058.12239692047596 (code B ref 1058); Tue, 14 Oct 2008 07:35:03 +0000 Original-Received: (at 1058) by emacsbugs.donarmstrong.com; 14 Oct 2008 07:26:44 +0000 Original-Received: from sallyv2.ics.uci.edu (sallyv2.ics.uci.edu [128.195.1.120]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m9E7QeSQ007590 for <1058@emacsbugs.donarmstrong.com>; Tue, 14 Oct 2008 00:26:41 -0700 Original-Received: from mothra.ics.uci.edu (mothra.ics.uci.edu [128.195.6.93]) by sallyv2.ics.uci.edu (8.13.7+Sun/8.13.7) with ESMTP id m9E7QIgJ011234; Tue, 14 Oct 2008 00:26:19 -0700 (PDT) Original-Received: (from dann@localhost) by mothra.ics.uci.edu (8.13.8+Sun/8.13.6/Submit) id m9E7QHeb004332; Tue, 14 Oct 2008 00:26:17 -0700 (PDT) In-Reply-To: (Stefan Monnier's message of "Mon, 13 Oct 2008 15:07:59 -0400") Original-Lines: 164 X-ICS-MailScanner-Information: Please contact the ISP for more information X-ICS-MailScanner-ID: m9E7QIgJ011234 X-ICS-MailScanner: Found to be clean X-ICS-MailScanner-SpamCheck: not spam, SpamAssassin (score=0.437, required 5, autolearn=disabled, ALL_TRUSTED -1.44, FM_MULTI_ODD2 1.10, FM_MULTI_ODD3 0.70, TW_RG 0.08) X-ICS-MailScanner-From: dann@mothra.ics.uci.edu X-detected-kernel: by mx20.gnu.org: Linux 2.6 (newer, 3) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Resent-Date: Tue, 14 Oct 2008 03:50:05 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:21459 Archived-At: Stefan Monnier 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