Rev 38: Catch zombies after kill, if any. in http://bazaar.launchpad.net/%7Evila/bzr/local-test-server
Vincent Ladeuil
v.ladeuil+lp at free.fr
Tue Jun 24 17:56:57 BST 2008
At http://bazaar.launchpad.net/%7Evila/bzr/local-test-server
------------------------------------------------------------
revno: 38
revision-id: v.ladeuil+lp at free.fr-20080624165649-w5xzsgiexl8z8em8
parent: v.ladeuil+lp at free.fr-20080624165255-qq035rl1krim1oi4
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: local_test_server
timestamp: Tue 2008-06-24 18:56:49 +0200
message:
Catch zombies after kill, if any.
* server.py:
(Server._kill_server): Renamed and generalized from
_kill_server_with_SIGTERM. Also catch zombies if any.
(Server._wait_for_server_process_death): Generalized.
modified:
server.py server.py-20080524160639-rqhbexqatjqbwypw-1
-------------- next part --------------
=== modified file 'server.py'
--- a/server.py 2008-06-13 15:10:45 +0000
+++ b/server.py 2008-06-24 16:56:49 +0000
@@ -228,25 +228,36 @@
"""
return self._hk_poll(self.is_running)
- def _kill_server_with_SIGTERM(self, pid):
+ def _kill_server(self, pid, sig):
try:
- os.kill(pid, signal.SIGTERM)
+ os.kill(pid, sig)
except OSError, e:
if e.errno == errno.ESRCH:
# The process doesn't exist anymore
return True
else:
raise
+ # Catch zombies
+ try:
+ os.waitpid(pid, os.WNOHANG)
+ except OSError, e:
+ if e.errno == errno.ECHILD:
+ # The process doesn't exist anymore
+ pass
+ else:
+ raise
return False
- def _wait_for_server_process_death(self):
+ def _wait_for_server_process_death(self, sig=None):
+ if sig is None:
+ sig = signal.SIGTERM
def server_is_dead():
pid = self.get_pid()
if pid is None:
return True
else:
- killed = self._kill_server_with_SIGTERM(pid)
+ killed = self._kill_server(pid, sig)
return killed
return self._hk_poll(server_is_dead, interval=500.0)
More information about the bazaar-commits
mailing list