[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