aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaroly Lorentey2004-06-08 01:33:48 +0000
committerKaroly Lorentey2004-06-08 01:33:48 +0000
commitd6b4b3cfcc7bfc5a4a3b24acf2ce7e0a49c08b5f (patch)
tree701e4df28553298609ee5749615a0ebea35899c3
parent8516815bc226d01bf835dc609633938c3ccf4001 (diff)
downloademacs-d6b4b3cfcc7bfc5a4a3b24acf2ce7e0a49c08b5f.tar.gz
emacs-d6b4b3cfcc7bfc5a4a3b24acf2ce7e0a49c08b5f.zip
Make server-start safe against accidental restarts.
* lisp/server.el (server-start): Ask before restarting if the old server still has clients. Added feedback messages. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-195
-rw-r--r--lisp/server.el72
1 files changed, 40 insertions, 32 deletions
diff --git a/lisp/server.el b/lisp/server.el
index 818639889c2..71db27cc20d 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -368,39 +368,47 @@ Emacs distribution as your standard \"editor\".
368 368
369Prefix arg means just kill any existing server communications subprocess." 369Prefix arg means just kill any existing server communications subprocess."
370 (interactive "P") 370 (interactive "P")
371 ;; It is safe to get the user id now. 371 (when (or
372 (setq server-socket-dir (or server-socket-dir 372 (not server-clients)
373 (format "/tmp/emacs%d" (user-uid)))) 373 (yes-or-no-p
374 ;; Make sure there is a safe directory in which to place the socket. 374 "The current server still has clients; delete them? "))
375 (server-ensure-safe-dir server-socket-dir) 375 ;; It is safe to get the user id now.
376 ;; kill it dead! 376 (setq server-socket-dir (or server-socket-dir
377 (if server-process 377 (format "/tmp/emacs%d" (user-uid))))
378 (condition-case () (delete-process server-process) (error nil))) 378 ;; Make sure there is a safe directory in which to place the socket.
379 ;; Delete the socket files made by previous server invocations. 379 (server-ensure-safe-dir server-socket-dir)
380 (condition-case () 380 ;; kill it dead!
381 (delete-file (expand-file-name server-name server-socket-dir))
382 (error nil))
383 ;; If this Emacs already had a server, clear out associated status.
384 (while server-clients
385 (server-delete-client (car server-clients)))
386 (unless leave-dead
387 (if server-process 381 (if server-process
388 (server-log (message "Restarting server"))) 382 (condition-case () (delete-process server-process) (error nil)))
389 (letf (((default-file-modes) ?\700)) 383 ;; Delete the socket files made by previous server invocations.
390 (add-hook 'delete-tty-after-functions 'server-handle-delete-tty) 384 (condition-case ()
391 (add-hook 'suspend-tty-functions 'server-handle-suspend-tty) 385 (delete-file (expand-file-name server-name server-socket-dir))
392 (add-hook 'delete-frame-functions 'server-handle-delete-frame) 386 (error nil))
393 (add-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function) 387 ;; If this Emacs already had a server, clear out associated status.
394 (add-hook 'kill-emacs-query-functions 'server-kill-emacs-query-function) 388 (while server-clients
395 (setq server-process 389 (server-delete-client (car server-clients)))
396 (make-network-process 390 (if leave-dead
397 :name "server" :family 'local :server t :noquery t 391 (progn
398 :service (expand-file-name server-name server-socket-dir) 392 (server-log (message "Server stopped"))
399 :sentinel 'server-sentinel :filter 'server-process-filter 393 (setq server-process nil))
400 ;; We must receive file names without being decoded. 394 (if server-process
401 ;; Those are decoded by server-process-filter according 395 (server-log (message "Restarting server"))
402 ;; to file-name-coding-system. 396 (server-log (message "Starting server")))
403 :coding 'raw-text))))) 397 (letf (((default-file-modes) ?\700))
398 (add-hook 'delete-tty-after-functions 'server-handle-delete-tty)
399 (add-hook 'suspend-tty-functions 'server-handle-suspend-tty)
400 (add-hook 'delete-frame-functions 'server-handle-delete-frame)
401 (add-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
402 (add-hook 'kill-emacs-query-functions 'server-kill-emacs-query-function)
403 (setq server-process
404 (make-network-process
405 :name "server" :family 'local :server t :noquery t
406 :service (expand-file-name server-name server-socket-dir)
407 :sentinel 'server-sentinel :filter 'server-process-filter
408 ;; We must receive file names without being decoded.
409 ;; Those are decoded by server-process-filter according
410 ;; to file-name-coding-system.
411 :coding 'raw-text))))))
404 412
405;;;###autoload 413;;;###autoload
406(define-minor-mode server-mode 414(define-minor-mode server-mode