1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-13 07:47:14 +03:00

Clean up monitor threads on shutdown

Fixes #136
This commit is contained in:
Jonathan Harris 2016-11-06 12:32:12 +00:00
parent 021fc43345
commit 5a9d0730d8
2 changed files with 16 additions and 4 deletions

View File

@ -30,7 +30,7 @@ from config import appname, applongname, config
if platform == 'win32' and getattr(sys, 'frozen', False):
# By default py2exe tries to write log to dirname(sys.executable) which fails when installed
import tempfile
sys.stderr = open(join(tempfile.gettempdir(), '%s.log' % appname), 'wt')
sys.stdout = sys.stderr = open(join(tempfile.gettempdir(), '%s.log' % appname), 'wt', 0) # unbuffered
from l10n import Translations
Translations().install(config.get('language') or None)
@ -690,13 +690,15 @@ class AppWindow:
self.status['text'] = unicode(e)
def onexit(self, event=None):
hotkeymgr.unregister()
if platform!='darwin' or self.w.winfo_rooty()>0: # http://core.tcl.tk/tk/tktview/c84f660833546b1b84e7
config.set('geometry', '+{1}+{2}'.format(*self.w.geometry().split('+')))
config.close()
self.w.withdraw() # Following items can take a few seconds, so hide the main window while they happen
hotkeymgr.unregister()
monitor.close()
eddn.close()
self.updater.close()
self.session.close()
config.close()
self.w.destroy()
def drag_start(self, event):

View File

@ -119,7 +119,6 @@ class EDLogs(FileSystemEventHandler):
self.observer = Observer()
self.observer.daemon = True
self.observer.start()
atexit.register(self.observer.stop)
if not self.observed and not polling:
self.observed = self.observer.schedule(self, self.currentdir)
@ -146,6 +145,17 @@ class EDLogs(FileSystemEventHandler):
self.observer.unschedule_all()
self.thread = None # Orphan the worker thread - will terminate at next poll
def close(self):
thread = self.thread
self.stop()
if self.observer:
self.observer.stop()
if thread:
thread.join()
if self.observer:
self.observer.join()
self.observer = None
def running(self):
return self.thread and self.thread.is_alive()