diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2014-02-19 08:08:37 -0500 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2014-02-19 08:24:07 -0500 |
commit | 8a8a47998438707f988838b505b98b99a11ce687 (patch) | |
tree | 76ec69e4a9d2ab29e10908c7bd3b8fd1b0fedc4d | |
parent | 92d94a3f6164f74d7ff48703b002e9127d7d7821 (diff) | |
download | bcfg2-8a8a47998438707f988838b505b98b99a11ce687.tar.gz bcfg2-8a8a47998438707f988838b505b98b99a11ce687.tar.bz2 bcfg2-8a8a47998438707f988838b505b98b99a11ce687.zip |
core: only shut down core once
-rw-r--r-- | src/lib/Bcfg2/Server/Core.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py index 38daa870e..03bc7bff4 100644 --- a/src/lib/Bcfg2/Server/Core.py +++ b/src/lib/Bcfg2/Server/Core.py @@ -189,6 +189,12 @@ class BaseCore(object): self.setup = setup atexit.register(self.shutdown) + #: if :func:`Bcfg2.Server.Core.shutdown` is called explicitly, + #: then :mod:`atexit` calls it *again*, so it gets called + #: twice. This is potentially bad, so we use + #: :attr:`Bcfg2.Server.Core._running` as a flag to determine + #: if the core needs to be shutdown, and only do it once. + self._running = True #: Threading event to signal worker threads (e.g., #: :attr:`fam_thread`) to shutdown @@ -451,9 +457,13 @@ class BaseCore(object): def shutdown(self): """ Perform plugin and FAM shutdown tasks. """ + if not self._running: + self.logger.debug("%s: Core already shut down" % self.name) + return self.logger.info("%s: Shutting down core..." % self.name) if not self.terminate.isSet(): self.terminate.set() + self._running = False self.fam.shutdown() self.logger.info("%s: FAM shut down" % self.name) for plugin in list(self.plugins.values()): |