Patchwork [bitbake-devel] prserv: Fix exit race issues

login
register
mail settings
Submitter Richard Purdie
Date March 28, 2014, 12:10 p.m.
Message ID <1396008654.14790.0.camel@ted>
Download mbox | patch
Permalink /patch/69569/
State New
Headers show

Comments

Richard Purdie - March 28, 2014, 12:10 p.m.
We shouldn't immediately remove the pid file when stopping the server, if we do, this
causes a traceback within the server itself which can then hang. Fix this by removing
the stale pid file as the last thing we do.

Also:

* don't printing a new "waiting" line every 0.5 seconds.
* make the loop more granular since the user can 'feel' the 0.5 seconds

[YOCTO #5984]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---

Patch

diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py
index e4c1c2a..1e170ce 100644
--- a/bitbake/lib/prserv/serv.py
+++ b/bitbake/lib/prserv/serv.py
@@ -275,17 +275,13 @@  def stop_daemon(host, port):
         PRServerConnection(host, port).terminate()
     except:
         logger.critical("Stop PRService %s:%d failed" % (host,port))
-    time.sleep(0.5)
 
     try:
         if pid:
-            if os.path.exists(pidfile):
-                os.remove(pidfile)
-
             wait_timeout = 0
-            while is_running(pid) and wait_timeout < 10:
-                print("Waiting for pr-server to exit.")
-                time.sleep(0.5)
+            print("Waiting for pr-server to exit.")
+            while is_running(pid) and wait_timeout < 50:
+                time.sleep(0.1)
                 wait_timeout += 1
 
             if is_running(pid):
@@ -293,6 +289,9 @@  def stop_daemon(host, port):
                 os.kill(pid,signal.SIGTERM)
                 time.sleep(0.1)
 
+            if os.path.exists(pidfile):
+                os.remove(pidfile)
+
     except OSError as e:
         err = str(e)
         if err.find("No such process") <= 0: