From: "Juanma Barranquero" <lekktu@gmail.com>
To: "Stefan Monnier" <monnier@iro.umontreal.ca>
Cc: Eli Zaretskii <eliz@gnu.org>,
Ulrich Mueller <ulm@kph.uni-mainz.de>,
emacs-devel@gnu.org
Subject: Re: error in server-running-p on M$
Date: Mon, 24 Nov 2008 15:46:08 +0100 [thread overview]
Message-ID: <f7ccd24b0811240646j37466434ve63dbe374c77d14d@mail.gmail.com> (raw)
In-Reply-To: <jwvskphj0kb.fsf-monnier+emacs@gnu.org>
On Mon, Nov 24, 2008 at 03:55, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> That's OK: when we add server-running-p to server-start this objection
> will disappear so we can change the code at the same time to remove the
> entry when stopping the server.
WDYT about the following patch?
Juanma
2008-11-24 Juanma Barranquero <lekktu@gmail.com>
* server.el (server-sentinel): Uncomment code to delete connection file.
(server-running-p): Return t for TCP servers if the auth file says
there's a local server and we find an Emacs process with the right PID.
Doc fix.
(server-start): Save the connection file in the process' property list.
Delete it only when we are reasonably convinced that it is not owned by
a running server.
Index: lisp/server.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/server.el,v
retrieving revision 1.175
diff -u -2 -b -r1.175 server.el
--- lisp/server.el 18 Nov 2008 16:27:09 -0000 1.175
+++ lisp/server.el 24 Nov 2008 14:40:52 -0000
@@ -326,9 +326,7 @@
(set-process-query-on-exit-flag proc nil))
;; Delete the associated connection file, if applicable.
- ;; This is actually problematic: the file may have been overwritten by
- ;; another Emacs server in the mean time, so it's not ours any more.
- ;; (and (process-contact proc :server)
- ;; (eq (process-status proc) 'closed)
- ;; (ignore-errors (delete-file (process-get proc :server-file))))
+ (and (process-contact proc :server)
+ (eq (process-status proc) 'closed)
+ (ignore-errors (delete-file (process-get proc :server-file))))
(server-log (format "Status changed to %s: %s" (process-status
proc) msg) proc)
(server-delete-client proc))
@@ -465,12 +463,14 @@
(yes-or-no-p
"The current server still has clients; delete them? "))
+ (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir))
+ (server-file (expand-file-name server-name server-dir)))
(when server-process
;; kill it dead!
(ignore-errors (delete-process server-process)))
;; Delete the socket files made by previous server invocations.
- (when server-socket-dir
- (condition-case ()
- (delete-file (expand-file-name server-name server-socket-dir))
- (error nil)))
+ (if (not (server-running-p server-name))
+ (ignore-errors (delete-file server-file))
+ (setq server-mode nil) ;; already set by the minor mode code
+ (error "Server %S is already running" server-name))
;; If this Emacs already had a server, clear out associated status.
(while server-clients
@@ -481,6 +481,4 @@
(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)))
;; Make sure there is a safe directory in which to place the socket.
(server-ensure-safe-dir server-dir)
@@ -517,4 +515,5 @@
:plist '(:authenticated t)))))
(unless server-process (error "Could not start server process"))
+ (process-put server-process :server-file server-file)
(when server-use-tcp
(let ((auth-key
@@ -535,5 +534,7 @@
(defun server-running-p (&optional name)
- "Test whether server NAME is running."
+ "Test whether server NAME is running.
+NOTE: This function is intended to be called from `server-start'
+and it is NOT 100% reliable."
(interactive
(list (if current-prefix-arg
@@ -541,5 +542,15 @@
(unless name (setq name server-name))
(condition-case nil
- (progn
+ (if server-use-tcp
+ (with-temp-buffer
+ (insert-file-contents-literally
+ (expand-file-name name server-auth-dir))
+ (and (looking-at "127\.0\.0\.1:[0-9]+ \\([0-9]+\\)")
+ (let ((case-fold-search t)
+ (proc (assq 'comm
+ (system-process-attributes
+ (string-to-number (match-string 1))))))
+ (and proc
+ (string-match-p "emacs" (cdr proc))))))
(delete-process
(make-network-process
next prev parent reply other threads:[~2008-11-24 14:46 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-22 11:44 error in server-running-p on M$ dhruva
2008-11-22 11:58 ` Juanma Barranquero
2008-11-22 12:51 ` Eli Zaretskii
2008-11-22 13:00 ` Juanma Barranquero
2008-11-22 13:20 ` Eli Zaretskii
2008-11-22 13:37 ` Juanma Barranquero
2008-11-22 13:53 ` Eli Zaretskii
2008-11-22 14:13 ` Ulrich Mueller
2008-11-22 14:17 ` Juanma Barranquero
2008-11-22 14:29 ` Ulrich Mueller
2008-11-22 14:36 ` Juanma Barranquero
2008-11-22 15:35 ` Ulrich Mueller
2008-11-22 16:04 ` Juanma Barranquero
2008-11-22 16:52 ` Ulrich Mueller
2008-11-22 21:47 ` Juanma Barranquero
2008-11-23 3:56 ` dhruva
2008-11-23 3:59 ` Juanma Barranquero
2008-11-23 4:01 ` dhruva
2008-11-23 4:03 ` Juanma Barranquero
2008-11-23 4:10 ` dhruva
2008-11-23 4:15 ` Juanma Barranquero
2008-11-23 4:17 ` dhruva
2008-11-23 4:19 ` Juanma Barranquero
2008-11-23 8:14 ` Server protocol (was: Re: error in server-running-p on M$) Ulrich Mueller
2008-11-23 11:33 ` Juanma Barranquero
2008-11-23 16:33 ` dhruva
2008-11-23 17:48 ` Juanma Barranquero
2008-11-23 4:02 ` error in server-running-p on M$ Stefan Monnier
2008-11-23 4:10 ` Juanma Barranquero
2008-11-23 5:21 ` Stefan Monnier
2008-11-23 5:32 ` Juanma Barranquero
2008-11-23 5:57 ` Stefan Monnier
2008-11-23 11:26 ` Juanma Barranquero
2008-11-23 12:46 ` Juanma Barranquero
2008-11-23 13:13 ` Ulrich Mueller
2008-11-24 2:55 ` Stefan Monnier
2008-11-24 14:46 ` Juanma Barranquero [this message]
2008-11-24 15:10 ` Ulrich Mueller
2008-11-24 15:16 ` Juanma Barranquero
2008-11-24 15:34 ` Ulrich Mueller
2008-11-24 15:45 ` Juanma Barranquero
2008-12-09 20:46 ` Stefan Monnier
2008-12-10 7:05 ` Chetan Pandya
2008-12-10 12:59 ` Juanma Barranquero
2008-12-10 18:30 ` Stefan Monnier
2008-12-10 18:47 ` Juanma Barranquero
2008-12-11 2:07 ` Stefan Monnier
2008-12-11 16:30 ` Juanma Barranquero
2008-12-11 18:47 ` Stefan Monnier
2008-12-12 0:40 ` Juanma Barranquero
2008-12-12 4:51 ` Stefan Monnier
2008-12-12 8:19 ` Juanma Barranquero
2008-12-12 18:49 ` Stefan Monnier
2008-12-12 20:20 ` Juanma Barranquero
2008-11-23 3:58 ` Stefan Monnier
2008-11-23 3:59 ` Stefan Monnier
2008-11-23 4:12 ` Juanma Barranquero
2008-11-23 5:19 ` Stefan Monnier
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f7ccd24b0811240646j37466434ve63dbe374c77d14d@mail.gmail.com \
--to=lekktu@gmail.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=ulm@kph.uni-mainz.de \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.