Bastian Blank
2008-Mar-26 11:00 UTC
[Xen-devel] [PATCH 1/3] xenstored - postpone fork after initialization
# HG changeset patch # User Bastian Blank <waldi@debian.org> # Date 1206528849 -3600 # Node ID 5e0412c5f5798b5c0acdd4057c91b3820d6c4afd # Parent f5e6cccfdda5537876d6fc2b87ea1124d6043fc8 Postpone fork after initialization. Signed-off-by: Bastian Blank <waldi@debian.org> diff -r f5e6cccfdda5 -r 5e0412c5f579 tools/xenstore/xenstored_core.c --- a/tools/xenstore/xenstored_core.c Tue Mar 25 18:02:00 2008 +0000 +++ b/tools/xenstore/xenstored_core.c Wed Mar 26 11:54:09 2008 +0100 @@ -1839,13 +1839,6 @@ int main(int argc, char *argv[]) } } - if (dofork) { - openlog("xenstored", 0, LOG_DAEMON); - daemonize(); - } - if (pidfile) - write_pidfile(pidfile); - /* Talloc leak reports go to stderr, which is closed if we fork. */ if (!dofork) talloc_enable_leak_report_full(); @@ -1899,22 +1892,30 @@ int main(int argc, char *argv[]) /* Restore existing connections. */ restore_existing_connections(); - if (outputpid) { - printf("%ld\n", (long)getpid()); - fflush(stdout); - } - /* redirect to /dev/null now we''re ready to accept connections */ if (dofork) { int devnull = open("/dev/null", O_RDWR); if (devnull == -1) barf_perror("Could not open /dev/null\n"); + + openlog("xenstored", 0, LOG_DAEMON); + + daemonize(); + + if (outputpid) { + printf("%ld\n", (long)getpid()); + fflush(stdout); + } + dup2(devnull, STDIN_FILENO); dup2(devnull, STDOUT_FILENO); dup2(devnull, STDERR_FILENO); close(devnull); xprintf = trace; } + + if (pidfile) + write_pidfile(pidfile); signal(SIGHUP, trigger_reopen_log); -- History tends to exaggerate. -- Col. Green, "The Savage Curtain", stardate 5906.4 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Mar-27 09:15 UTC
Re: [Xen-devel] [PATCH 1/3] xenstored - postpone fork after initialization
On 26/3/08 11:00, "Bastian Blank" <bastian@waldi.eu.org> wrote:> HG changeset patch > # User Bastian Blank <waldi@debian.org> > # Date 1206528849 -3600 > # Node ID 5e0412c5f5798b5c0acdd4057c91b3820d6c4afd > # Parent f5e6cccfdda5537876d6fc2b87ea1124d6043fc8 > Postpone fork after initialization. > > Signed-off-by: Bastian Blank <waldi@debian.org>I applied all three patches as c/s 17296 and then reverted them in c/s 17304 because they don''t work. I think delaying xenstored daemonisation breaks its startup. Certainly xend itself came up, but xenstore-ls for example did not work, so clearly xenstored had not initialised properly. In any case I think it''s bad practice to daemonise after initialisation -- if you''re going to daemonise it makes sense to do it as early as possible. Perhaps a better way to go would be to wait for the stdout pipe to be half-closed? Or to pass switch -P to xenstored and wait for the daemon pid to be written to the stdout pipe? -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Bastian Blank
2008-Mar-27 11:27 UTC
Re: [Xen-devel] [PATCH 1/3] xenstored - postpone fork after initialization
On Thu, Mar 27, 2008 at 09:15:55AM +0000, Keir Fraser wrote:> In any case I think it''s bad practice to daemonise after initialisation --The daemons I just checked disagree with you. They want to provide errors if the initialization fails, which is only possible before the parent exits.> Perhaps a better way to go would be to wait for the stdout pipe to be > half-closed? Or to pass switch -P to xenstored and wait for the daemon pid > to be written to the stdout pipe?Well, find the real problem. In my tests it properly responds to the clients. Bastian -- Killing is stupid; useless! -- McCoy, "A Private Little War", stardate 4211.8 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2008-Mar-27 11:36 UTC
Re: [Xen-devel] [PATCH 1/3] xenstored - postpone fork after initialization
By the way, were the xend startup changes required at all? getstatusoutput() waits for the child process to exit, doesn''t it? -- Keir On 27/3/08 11:27, "Bastian Blank" <bastian@waldi.eu.org> wrote:> On Thu, Mar 27, 2008 at 09:15:55AM +0000, Keir Fraser wrote: >> In any case I think it''s bad practice to daemonise after initialisation -- > > The daemons I just checked disagree with you. They want to provide > errors if the initialization fails, which is only possible before the > parent exits. > >> Perhaps a better way to go would be to wait for the stdout pipe to be >> half-closed? Or to pass switch -P to xenstored and wait for the daemon pid >> to be written to the stdout pipe? > > Well, find the real problem. In my tests it properly responds to the > clients. > > Bastian_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
John Levon
2008-Mar-27 16:20 UTC
Re: [Xen-devel] [PATCH 1/3] xenstored - postpone fork after initialization
On Thu, Mar 27, 2008 at 09:15:55AM +0000, Keir Fraser wrote:> In any case I think it''s bad practice to daemonise after initialisation -- > if you''re going to daemonise it makes sense to do it as early as possible.FWIW it''s not only good practice on Solaris but needed for 100% correct SMF behaviour: when the startup method returns the service is expected to be 100% ready to go regards john _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel