summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCsaba Henk <csaba@gluster.com>2011-04-17 04:45:59 +0000
committerAnand Avati <avati@gluster.com>2011-04-17 07:39:15 -0700
commit666e43aca607c90d95379caa13b42a4ed976e8a7 (patch)
tree1494fadb12dcd4e4db1a977b72cc4e56ee8b9355
parent856a7ee345713b66ccb6eba6fca276273807fe30 (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.py6
-rw-r--r--xlators/features/marker/utils/syncdaemon/syncdutils.py11
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 ba4d7a6dd..27c91858e 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 c8f751d33..4bf51da74 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)