[PATCH 3 of 4] cmdutil.service: move pidfile writing to the parent in daemon mode
Siddharth Agarwal
sid0 at fb.com
Wed Oct 2 23:19:45 UTC 2013
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1380752449 25200
# Wed Oct 02 15:20:49 2013 -0700
# Node ID 567a2b3f19214d776ca20ac0e44b206b75e6580c
# Parent e4b7774aec7e068677e811ddf7ddd24ed9ce3d65
cmdutil.service: move pidfile writing to the parent in daemon mode
There is a potential race here, which I suspect I've spotted in the wild, where
something reads the pid file after the parent exits but before the child has
had a chance to write to it. Moving writing the file to the parent causes this
to no longer be an issue.
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -497,6 +497,7 @@
pid = util.rundetached(runargs, condfn)
if pid < 0:
raise util.Abort(_('child process failed to start'))
+ writepid(pid)
finally:
try:
os.unlink(lockpath)
@@ -511,7 +512,8 @@
if initfn:
initfn()
- writepid(os.getpid())
+ if not opts['daemon']:
+ writepid(os.getpid())
if opts['daemon_pipefds']:
lockpath = opts['daemon_pipefds']
More information about the Mercurial-devel
mailing list