GNU bug report logs - #19688
[patch] add support for emacs daemon on Windows

Previous Next

Package: emacs;

Reported by: Mark Laws <mdl <at> 60hz.org>

Date: Sun, 25 Jan 2015 19:59:02 UTC

Severity: wishlist

Tags: patch

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Mark Laws <mdl <at> 60hz.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 19688 <at> debbugs.gnu.org
Subject: bug#19688: [patch] add support for emacs daemon on Windows
Date: Sat, 14 Feb 2015 22:16:46 +0900
On Sat, Feb 14, 2015 at 9:10 PM, Eli Zaretskii <eliz <at> gnu.org> wrote:
> Maybe I'm missing something, but I don't see a pipe being used on Unix
> for synchronization between emacsclient and the daemon started by
> emacsclient.  Rather, on Unix we do this:
>
>     dpid = fork ();
>
>     if (dpid > 0)
>       {
>         pid_t w;
>         w = waitpid (dpid, &status, WUNTRACED | WCONTINUED);
>
>         if ((w == -1) || !WIFEXITED (status) || WEXITSTATUS (status))
>           {
>             message (true, "Error: Could not start the Emacs daemon\n");
>             exit (EXIT_FAILURE);
>           }
>
>         /* Try connecting, the daemon should have started by now.  */
>         message (true, "Emacs daemon should have started, trying to connect again\n");
>         if ((emacs_socket = set_socket (1)) == INVALID_SOCKET)
>
> My reading of this is that we use 'waitpid' to tell us when the daemon
> has started and is ready to receive our connection.  There's no pipe
> involved here, AFAICT.  Am I missing something?

On Unix, emacsclient forks and execs (#1) emacs --daemon, which in
turn execs (#2) itself. emacsclient waits on #1, which is told when to
quit via the pipe between #1 and #2, and when it quits, we know that
the daemon must be ready.

> My understanding is that your Windows variant of the above is to wait
> on an event that is signaled by Emacs when it starts in daemon mode.
> My question is: can we use something similar to Unix here, like
> 'WaitForInputIdle'?  After all, the above call to 'waitpid' just tells
> us the daemon process is past its initialization stage, as far as the
> OS is concerned, which isn't too fine-grained.  Perhaps even
> repeatedly calling 'GetExitCodeProcess' until it returns STILL_ACTIVE
> for the first time would be a faithful enough emulation of what
> 'waitpid' does here?

On Windows, the Emacs process created by emacsclient initializes
daemon mode itself, so neither of those would give us a way of knowing
that the daemon has actually been initialized. That's why we have to
use an event on Windows. In other words, the reason we can just use
waitpid in emacsclient on Unix is because the act of waiting on the
daemon to start is happening *between the two forked emacs children*,
whereas on Windows, the waiting is happening directly between
emacsclient and emacs.

> P.S. What's up with your copyright assignment?  I still don't see it
> on file.

Sorry, I sent it to copyright-clerk <at> fsf.org (since that's where it
came from) instead of assign <at> gnu.org. I sent it to the latter just
now.

-- 
|v\ /\ |\ |< |_ /\ \^| //




This bug report was last modified 10 years and 143 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.