diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-03-28 12:10:54 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-03-30 10:10:36 +0100 |
commit | 6448634205ac1c62fc2ed163498cf65f0f21ca6b (patch) | |
tree | 045ce31ea89cb6e7b6de67d6029c46e78c71c557 /bitbake | |
parent | ef28fcd7feb13db21572d28549427ee153957097 (diff) | |
download | poky-6448634205ac1c62fc2ed163498cf65f0f21ca6b.tar.gz |
bitbake: prserv: Fix exit race issues
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]
(Bitbake rev: 81f41a806aeddcc38992163557672e296bcbc967)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/prserv/serv.py | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py index e4c1c2a6aa..1e170cea0a 100644 --- a/bitbake/lib/prserv/serv.py +++ b/bitbake/lib/prserv/serv.py | |||
@@ -275,17 +275,13 @@ def stop_daemon(host, port): | |||
275 | PRServerConnection(host, port).terminate() | 275 | PRServerConnection(host, port).terminate() |
276 | except: | 276 | except: |
277 | logger.critical("Stop PRService %s:%d failed" % (host,port)) | 277 | logger.critical("Stop PRService %s:%d failed" % (host,port)) |
278 | time.sleep(0.5) | ||
279 | 278 | ||
280 | try: | 279 | try: |
281 | if pid: | 280 | if pid: |
282 | if os.path.exists(pidfile): | ||
283 | os.remove(pidfile) | ||
284 | |||
285 | wait_timeout = 0 | 281 | wait_timeout = 0 |
286 | while is_running(pid) and wait_timeout < 10: | 282 | print("Waiting for pr-server to exit.") |
287 | print("Waiting for pr-server to exit.") | 283 | while is_running(pid) and wait_timeout < 50: |
288 | time.sleep(0.5) | 284 | time.sleep(0.1) |
289 | wait_timeout += 1 | 285 | wait_timeout += 1 |
290 | 286 | ||
291 | if is_running(pid): | 287 | if is_running(pid): |
@@ -293,6 +289,9 @@ def stop_daemon(host, port): | |||
293 | os.kill(pid,signal.SIGTERM) | 289 | os.kill(pid,signal.SIGTERM) |
294 | time.sleep(0.1) | 290 | time.sleep(0.1) |
295 | 291 | ||
292 | if os.path.exists(pidfile): | ||
293 | os.remove(pidfile) | ||
294 | |||
296 | except OSError as e: | 295 | except OSError as e: |
297 | err = str(e) | 296 | err = str(e) |
298 | if err.find("No such process") <= 0: | 297 | if err.find("No such process") <= 0: |