diff options
author | Csaba Henk <csaba@gluster.com> | 2011-04-17 04:45:59 +0000 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-04-17 07:39:15 -0700 |
commit | 666e43aca607c90d95379caa13b42a4ed976e8a7 (patch) | |
tree | 1494fadb12dcd4e4db1a977b72cc4e56ee8b9355 | |
parent | 856a7ee345713b66ccb6eba6fca276273807fe30 (diff) |
syncdaemon: minor cleanups on termination
Signed-off-by: Csaba Henk <csaba@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 2736 (gsyncd hangs if crash occurs in the non-main thread)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2736
-rw-r--r-- | xlators/features/marker/utils/syncdaemon/gsyncd.py | 6 | ||||
-rw-r--r-- | xlators/features/marker/utils/syncdaemon/syncdutils.py | 11 |
2 files changed, 9 insertions, 8 deletions
diff --git a/xlators/features/marker/utils/syncdaemon/gsyncd.py b/xlators/features/marker/utils/syncdaemon/gsyncd.py index ba4d7a6dda4..27c91858e0e 100644 --- a/xlators/features/marker/utils/syncdaemon/gsyncd.py +++ b/xlators/features/marker/utils/syncdaemon/gsyncd.py @@ -94,7 +94,7 @@ def startup(**kw): GLogger.setup(label=kw.get('label'), **lkw) def main(): - signal.signal(signal.SIGTERM, lambda *a: (finalize(*a), os._exit(1))) + signal.signal(signal.SIGTERM, lambda *a: finalize(*a, **{'exval': 1})) GLogger.setup() excont = FreeObject(exval = 0) try: @@ -103,9 +103,7 @@ def main(): except: log_raise_exception(excont) finally: - finalize() - # force exit in non-main thread too - os._exit(excont.exval) + finalize(excont.exval) def main_i(): rconf = {'go_daemon': 'should'} diff --git a/xlators/features/marker/utils/syncdaemon/syncdutils.py b/xlators/features/marker/utils/syncdaemon/syncdutils.py index c8f751d33f4..4bf51da746e 100644 --- a/xlators/features/marker/utils/syncdaemon/syncdutils.py +++ b/xlators/features/marker/utils/syncdaemon/syncdutils.py @@ -4,7 +4,7 @@ import time import fcntl import shutil import logging -from threading import Thread as baseThread +from threading import Lock, Thread as baseThread from errno import EACCES, EAGAIN from signal import SIGTERM, SIGKILL from time import sleep @@ -88,7 +88,10 @@ def grabpidfile(fname=None, setpid=True): content = str(os.getpid()) + '\n' return grabfile(fname, content=content) -def finalize(*a): +final_lock = Lock() + +def finalize(*a, **kw): + final_lock.acquire() if getattr(gconf, 'pid_file', None): rm_pidf = gconf.pid_file_owned if gconf.cpid: @@ -117,6 +120,7 @@ def finalize(*a): shutil.rmtree(gconf.ssh_ctl_dir) sys.stdout.flush() sys.stderr.flush() + os._exit(kw.get('exval', 0)) def log_raise_exception(excont): exc = sys.exc_info()[1] @@ -150,8 +154,7 @@ class Thread(baseThread): try: log_raise_exception(excont) finally: - finalize() - os._exit(excont.exval) + finalize(exval = excont.exval) kw['target'] = twrap baseThread.__init__(self, *a, **kw) self.setDaemon(True) |