[RigoDaemon] automatically shutdown on executable change

This commit is contained in:
Fabio Erculiani
2012-04-02 14:09:21 +02:00
parent 58efd1cc9d
commit e6fa2fb1cf
2 changed files with 14 additions and 23 deletions
+14 -4
View File
@@ -58,7 +58,7 @@ from entropy.exceptions import DependenciesNotFound, \
DependenciesCollision, DependenciesNotRemovable, SystemDatabaseError
from entropy.i18n import _
from entropy.misc import LogFile, ParallelTask, TimeScheduled, \
ReadersWritersSemaphore
ReadersWritersSemaphore, DirectoryMonitor
from entropy.fetchers import UrlFetcher
from entropy.output import TextInterface, purple
from entropy.client.interfaces import Client
@@ -449,15 +449,24 @@ class RigoDaemonService(dbus.service.Object):
Entropy.set_daemon(self)
self._entropy = Entropy()
self._fakeout = FakeOutFile(self._entropy)
exec_path = sys.argv[0]
write_output(
"__init__: dbus service loaded, pid: %d, ppid: %d" % (
os.getpid(), os.getppid(),)
)
"__init__: dbus service loaded, "
"pid: %d, ppid: %d, exec: %s" % (
os.getpid(), os.getppid(), exec_path,)
)
self._deferred_shutdown = False
self._deferred_shutdown_mutex = Lock()
signal.signal(signal.SIGUSR2, self._activate_deferred_shutdown)
flags = DirectoryMonitor.DN_MODIFY | DirectoryMonitor.DN_DELETE | \
DirectoryMonitor.DN_RENAME | DirectoryMonitor.DN_CREATE
self._mon = DirectoryMonitor(
os.path.dirname(exec_path),
self._activate_deferred_shutdown,
event_flags=flags)
def _activate_deferred_shutdown(self, *args):
"""
Activate deferred shutdown starting the ping/pong
@@ -569,6 +578,7 @@ class RigoDaemonService(dbus.service.Object):
"""
write_output("stop(): called", debug=True)
with self._activity_mutex:
GLib.idle_add(self._mon.close)
self._stop_signal = True
self._action_queue_waiter.release()
self._close_local_resources()
-19
View File
@@ -1,19 +0,0 @@
#!/usr/bin/python
import sys
sys.path.insert(0, "./")
sys.path.insert(1, "/usr/lib/rigo")
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from RigoDaemon.config import DbusConfig
if __name__ == "__main__":
mainloop = DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus(mainloop=mainloop)
entropy_bus = bus.get_object(
DbusConfig.BUS_NAME,
DbusConfig.OBJECT_PATH)
dbus.Interface(
entropy_bus,
dbus_interface=DbusConfig.BUS_NAME).reload()
raise SystemExit(0)