Subject: 25.1; Daemon doesn't exit on Windows if kill-emacs-hook asks a question

From: Eli Zaretskii <[email-masked]>
Date: Sun, 28 Aug 2016 22:09:51 +0300

Arrange for ~/.emacs to turn on desktop-save-mode in a way that causes
Emacs to ask whether to save desktop on exit, then start a daemon like
this

  emacsclient -c --alternate-editor="" SOME-FILE

When a frame opens and shows a buffer visiting SOME-FILE, type

  M-x kill-emacs RET

The frame will close, and emacsclient will exit, but the daemon it
started will remain running.  Worse, the daemon has shut down the
server, so you cannot communicate with it, only kill it.

The problem is that when Emacs asks whether to save the desktop, the
user doesn't see the question, and even if she did, she cannot answer
it because, with the last frame gone, there's no window procedure to
supply input, so Emacs is stuck in pselect waiting for input that will
never come.

Unfortunately, a very similar situation happens when the last client
frame is closed, but the daemon is not killed: in that case, Emacs
waits in pselect for the next connection.  So it is not easy to
distinguish this situation from a daemon waiting normally for a
connection.

Not sure how to solve this.  One possibility would be to disable the
"Save desktop?" question in this case, on MS-Windows only, and instead
act as if the answer is NO.  desktop-kill is called from several
places, so if we go this way, we will have to devise a way of figuring
out that the question cannot be answered.

In GNU Emacs 25.1.25 (i686-pc-mingw32)
 of 2016-08-27 built on HOME-C4E4A596F7
Repository revision: 17197d0ae9eac100b56078b2a48964b29710b76e
Windowing system distributor 'Microsoft Corp.', version 5.1.2600
Configured using:
 'configure --prefix=/d/usr --enable-checking=yes,glyphs --with-wide-int
 --with-modules 'CFLAGS=-O0 -gdwarf-4 -g3''

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY ACL GNUTLS LIBXML2 ZLIB
TOOLKIT_SCROLL_BARS MODULES

Important settings:
  value of $LANG: ENU
  locale-coding-system: cp1255

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message dired format-spec rfc822 mml
mml-sec password-cache epg epg-config gnus-util mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util help-fns help-mode easymenu
cl-loaddefs pcase cl-lib mail-prsvr mail-utils time-date mule-util
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel dos-w32 ls-lisp disp-table w32-win w32-vars term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan
thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian
slovak czech european ethiopic indian cyrillic chinese charscript
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote w32notify w32 multi-tty
make-network-process emacs)

Memory information:
((conses 16 93483 7377)
 (symbols 56 20757 0)
 (miscs 48 46 129)
 (strings 16 17781 5277)
 (string-bytes 1 441671)
 (vectors 16 12446)
 (vector-slots 8 432676 5026)
 (floats 8 162 229)
 (intervals 40 263 99)
 (buffers 856 21))