aboutsummaryrefslogtreecommitdiffstats
path: root/lib/prserv
diff options
context:
space:
mode:
authorKonrad Scherer <Konrad.Scherer@windriver.com>2013-11-15 15:51:47 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-11-18 17:18:40 +0000
commit22eec978e70794923c85689928c6be0cfe71cdcd (patch)
tree3366c6d895cc7aee9fdef87fad28fff1522675ff /lib/prserv
parent89abfbc1953e3711d6c90aff793ee622c22609b1 (diff)
downloadbitbake-contrib-22eec978e70794923c85689928c6be0cfe71cdcd.tar.gz
serv.py: Give pr-server up to 5 seconds to commit data
The default value of 0.5 seconds before sending the pr-server a SIGTERM is not enough to guarantee that sqlite has committed all the pr data to the database. By polling the pid to see if it is still running, this allows the pr-server process to shutdown cleanly and finish the final pr data commit. Signed-off-by: Konrad Scherer <Konrad.Scherer@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/prserv')
-rw-r--r--lib/prserv/serv.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py
index 7864594bb..e4c1c2a6a 100644
--- a/lib/prserv/serv.py
+++ b/lib/prserv/serv.py
@@ -13,6 +13,7 @@ except ImportError:
import bb.server.xmlrpc
import prserv
import prserv.db
+import errno
logger = logging.getLogger("BitBake.PRserv")
@@ -280,8 +281,18 @@ def stop_daemon(host, port):
if pid:
if os.path.exists(pidfile):
os.remove(pidfile)
- os.kill(pid,signal.SIGTERM)
- time.sleep(0.1)
+
+ wait_timeout = 0
+ while is_running(pid) and wait_timeout < 10:
+ print("Waiting for pr-server to exit.")
+ time.sleep(0.5)
+ wait_timeout += 1
+
+ if is_running(pid):
+ print("Sending SIGTERM to pr-server.")
+ os.kill(pid,signal.SIGTERM)
+ time.sleep(0.1)
+
except OSError as e:
err = str(e)
if err.find("No such process") <= 0:
@@ -289,6 +300,14 @@ def stop_daemon(host, port):
return 0
+def is_running(pid):
+ try:
+ os.kill(pid, 0)
+ except OSError as err:
+ if err.errno == errno.ESRCH:
+ return False
+ return True
+
def is_local_special(host, port):
if host.strip().upper() == 'localhost'.upper() and (not port):
return True