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)  | 
