all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: mdl@60hz.org
Cc: 19688@debbugs.gnu.org
Subject: bug#19688: [patch] add support for emacs daemon on Windows
Date: Sat, 14 Feb 2015 14:10:28 +0200	[thread overview]
Message-ID: <8361b4y9qj.fsf@gnu.org> (raw)
In-Reply-To: <83pp9e42n8.fsf@gnu.org>

> Date: Fri, 13 Feb 2015 10:49:31 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 19688@debbugs.gnu.org
> 
> > Date: Fri, 13 Feb 2015 09:07:04 +0900
> > From: Mark Laws <mdl@60hz.org>
> > Cc: Daniel Colascione <dancol@dancol.org>, 19688@debbugs.gnu.org
> > 
> > Any chance to check out the patches yet?
> 
> It's on my todo.

Sorry for the long delay (life intervened).

After reading the last messages, I must ask that we back up a notch
and discuss something I'm not sure I understand correctly.
Specifically, this issue:

> >> >> +#define W32_EMACS_SERVER_GUID "{0B8E5DCB-D7CF-4423-A9F1-2F6927F0D318}"
> >> >
> >> > Where did this GUID come from?
> >> >
> >> I generated it myself.
> >
> > Is that safe?  Do we care whether this GUID is globally unique?  Why
> > exactly do we need it to begin with?
> 
> It should be safe. On UNIX, Emacs uses a pipe to tell emacsclient when
> it's done initializing. On Windows, since we don't have fork, the
> easiest options are either a named event object[1] or specifying that
> the child process inherit the event handle in CreateProcess.

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?

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?

Could you please try these techniques and see if they do the job?  If
they do, we can get rid of the event stuff, I think.

Thanks.

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





  reply	other threads:[~2015-02-14 12:10 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-25 19:18 bug#19688: [patch] add support for emacs daemon on Windows Mark Laws
2015-01-25 20:34 ` Eli Zaretskii
     [not found]   ` <CADemMPM+Tix-6FJ+CO3HA8y7Cq6AV0kv_e6_qn7BaSw1QMOwTQ@mail.gmail.com>
2015-01-26  6:00     ` Eli Zaretskii
2015-01-26  7:40       ` Mark Laws
2015-01-26 11:56         ` Daniel Colascione
2015-01-27  8:40           ` Mark Laws
2015-01-30  0:36             ` Mark Laws
2015-01-30  6:28               ` Eli Zaretskii
2015-02-13  0:07                 ` Mark Laws
2015-02-13  8:49                   ` Eli Zaretskii
2015-02-14 12:10                     ` Eli Zaretskii [this message]
2015-02-14 13:16                       ` Mark Laws
2015-02-14 13:28                         ` Eli Zaretskii
2015-02-14 13:37                           ` Mark Laws
2015-02-14 15:24                             ` Eli Zaretskii
2015-02-14 16:34                               ` Mark Laws
2015-02-14 16:53                                 ` Eli Zaretskii
2015-02-14 16:57                                   ` Mark Laws
2015-02-14 17:23                                     ` Eli Zaretskii
2015-02-14 17:30                                       ` Mark Laws
2015-02-14 17:42                                         ` Eli Zaretskii
2015-02-14 17:57                                           ` Mark Laws
2015-02-14 18:26                                             ` Eli Zaretskii
2015-02-14 19:21                                               ` Mark Laws
2015-02-14 19:29                                                 ` Eli Zaretskii
2015-02-14 21:15                                                   ` Mark Laws
2015-02-19 16:31                                                     ` Mark Laws
2015-02-19 16:56                                                       ` Eli Zaretskii
2015-02-21 13:03                                                         ` Eli Zaretskii
2015-02-21 19:30                                                           ` Mark Laws
2015-02-27 14:26                                                             ` Eli Zaretskii

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=8361b4y9qj.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=19688@debbugs.gnu.org \
    --cc=mdl@60hz.org \
    /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.