diff options
| author | Karoly Lorentey | 2004-06-08 01:33:48 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2004-06-08 01:33:48 +0000 |
| commit | d6b4b3cfcc7bfc5a4a3b24acf2ce7e0a49c08b5f (patch) | |
| tree | 701e4df28553298609ee5749615a0ebea35899c3 | |
| parent | 8516815bc226d01bf835dc609633938c3ccf4001 (diff) | |
| download | emacs-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.el | 72 |
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 | ||
| 369 | Prefix arg means just kill any existing server communications subprocess." | 369 | Prefix 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 |