Join listening thread on shutdown to make sure it exits properly before
terminating the interpreter
This commit is contained in:
parent
cb9db1658b
commit
2578ca3e21
|
@ -44,6 +44,7 @@ from SocketServer import ThreadingMixIn
|
||||||
import deluge.xmlrpclib as xmlrpclib
|
import deluge.xmlrpclib as xmlrpclib
|
||||||
import gobject
|
import gobject
|
||||||
import threading
|
import threading
|
||||||
|
import socket
|
||||||
|
|
||||||
import deluge.libtorrent as lt
|
import deluge.libtorrent as lt
|
||||||
import deluge.configmanager
|
import deluge.configmanager
|
||||||
|
@ -269,9 +270,11 @@ class Core(
|
||||||
|
|
||||||
component.start()
|
component.start()
|
||||||
|
|
||||||
t = threading.Thread(target=self.serve_forever)
|
self._should_shutdown = False
|
||||||
t.setDaemon(True)
|
|
||||||
t.start()
|
self.listen_thread = threading.Thread(target=self.handle_thread)
|
||||||
|
self.listen_thread.setDaemon(False)
|
||||||
|
self.listen_thread.start()
|
||||||
gobject.threads_init()
|
gobject.threads_init()
|
||||||
|
|
||||||
self.loop = gobject.MainLoop()
|
self.loop = gobject.MainLoop()
|
||||||
|
@ -279,11 +282,32 @@ class Core(
|
||||||
self.loop.run()
|
self.loop.run()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
self._shutdown()
|
self._shutdown()
|
||||||
|
|
||||||
|
def handle_thread(self):
|
||||||
|
try:
|
||||||
|
while not self._should_shutdown:
|
||||||
|
self.handle_request()
|
||||||
|
self._should_shutdown = False
|
||||||
|
|
||||||
|
except Exception, e:
|
||||||
|
log.debug("handle_thread: %s", e)
|
||||||
|
|
||||||
def _shutdown(self, *data):
|
def _shutdown(self, *data):
|
||||||
"""This is called by a thread from shutdown()"""
|
"""This is called by a thread from shutdown()"""
|
||||||
log.info("Shutting down core..")
|
log.info("Shutting down core..")
|
||||||
|
self._should_shutdown = True
|
||||||
|
# Shutdown the socket
|
||||||
|
try:
|
||||||
|
self.socket.shutdown(socket.SHUT_RDWR)
|
||||||
|
except Exception, e:
|
||||||
|
log.debug("exception in socket shutdown: %s", e)
|
||||||
|
log.debug("Joining listen thread to make sure it shutdowns cleanly..")
|
||||||
|
# Join the listen thread for a maximum of 1 second
|
||||||
|
self.listen_thread.join(1.0)
|
||||||
|
|
||||||
|
# Start shutting down the components
|
||||||
component.shutdown()
|
component.shutdown()
|
||||||
|
|
||||||
# Make sure the config file has been saved
|
# Make sure the config file has been saved
|
||||||
self.config.save()
|
self.config.save()
|
||||||
del self.config
|
del self.config
|
||||||
|
|
Loading…
Reference in New Issue