From e6fa2fb1cf54d536278bd591573094b3da03bded Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Mon, 2 Apr 2012 14:09:21 +0200 Subject: [PATCH] [RigoDaemon] automatically shutdown on executable change --- rigo/RigoDaemon/app.py | 18 ++++++++++++++---- rigo/RigoDaemon/shutdown.py | 19 ------------------- 2 files changed, 14 insertions(+), 23 deletions(-) delete mode 100644 rigo/RigoDaemon/shutdown.py diff --git a/rigo/RigoDaemon/app.py b/rigo/RigoDaemon/app.py index 643042d1e..77a6659df 100755 --- a/rigo/RigoDaemon/app.py +++ b/rigo/RigoDaemon/app.py @@ -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() diff --git a/rigo/RigoDaemon/shutdown.py b/rigo/RigoDaemon/shutdown.py deleted file mode 100644 index 063d2c817..000000000 --- a/rigo/RigoDaemon/shutdown.py +++ /dev/null @@ -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)