From 33a247c4debd96917fa68d5263d9c3290df7bbc0 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Tue, 28 Jun 2011 18:40:38 +0200 Subject: [PATCH] cc-1799 : Filesystem handling replacing of files in gui, need to handle closing down processes on exit. --- python_apps/media-monitor/MediaMonitor.py | 12 +++++++++--- .../airtimefilemonitor/airtimeprocessevent.py | 14 ++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/python_apps/media-monitor/MediaMonitor.py b/python_apps/media-monitor/MediaMonitor.py index 004455122..e6aca761c 100644 --- a/python_apps/media-monitor/MediaMonitor.py +++ b/python_apps/media-monitor/MediaMonitor.py @@ -15,9 +15,15 @@ from airtimefilemonitor.airtimeprocessevent import AirtimeProcessEvent from airtimefilemonitor.mediaconfig import AirtimeMediaConfig def handleSigTERM(signum, frame): + logger = logging.getLogger() logger.info("Main Process Shutdown, TERM signal caught. %d") - if p is not None: + for p in processes: p.terminate() + logger.info("Killed process. %d", p.pid) + + notifier_daemon_pid = open('/var/run/airtime-notifier.pid', 'r').read() + os.kill(int(notifier_daemon_pid), 9) + logger.info("Killed process. %d", int(notifier_daemon_pid)) sys.exit(0) @@ -30,7 +36,7 @@ except Exception, e: sys.exit() logger = logging.getLogger() -p = None +processes = [] try: config = AirtimeMediaConfig() @@ -43,7 +49,7 @@ try: #create 5 worker processes for i in range(5): p = Process(target=notifier.process_file_events, args=(pe.multi_queue,)) - p.daemon = True + processes.append(p) p.start() signal.signal(signal.SIGTERM, handleSigTERM) diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py b/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py index 6b18a77dd..7ec3c941d 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimeprocessevent.py @@ -31,6 +31,7 @@ class AirtimeProcessEvent(ProcessEvent): self.supported_file_formats = ['mp3', 'ogg'] self.temp_files = {} self.moved_files = {} + self.gui_replaced = {} self.renamed_files = {} self.file_events = [] self.multi_queue = mpQueue() @@ -222,16 +223,18 @@ class AirtimeProcessEvent(ProcessEvent): def process_IN_MODIFY(self, event): if not event.dir: - #self.logger.info("%s: %s", event.maskname, event.pathname) + self.logger.info("%s: %s", event.maskname, event.pathname) if event.pathname in self.renamed_files: pass elif self.is_audio_file(event.name): self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY}) def process_IN_MOVED_FROM(self, event): - #self.logger.info("%s: %s", event.maskname, event.pathname) + self.logger.info("%s: %s", event.maskname, event.pathname) if not event.dir: - if event.pathname in self.temp_files: + if "goutputstream" in event.pathname: + self.gui_replaced[event.cookie] = None + elif event.pathname in self.temp_files: del self.temp_files[event.pathname] self.temp_files[event.cookie] = event.pathname elif event.pathname in self.renamed_files: @@ -240,13 +243,16 @@ class AirtimeProcessEvent(ProcessEvent): self.moved_files[event.cookie] = event.pathname def process_IN_MOVED_TO(self, event): - #self.logger.info("%s: %s", event.maskname, event.pathname) + self.logger.info("%s: %s", event.maskname, event.pathname) #if stuff dropped in stor via a UI move must change file permissions. self.set_needed_file_permissions(event.pathname, event.dir) if not event.dir: if event.cookie in self.temp_files: del self.temp_files[event.cookie] self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY}) + elif event.cookie in self.gui_replaced: + del self.gui_replaced[event.cookie] + self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY}) elif event.cookie in self.moved_files: old_filepath = self.moved_files[event.cookie] del self.moved_files[event.cookie]