Shut down IPC cleanly on exit.

This commit is contained in:
Florian Bruhin 2014-10-13 20:36:23 +02:00
parent 6dc0bfa2d2
commit a849901693
2 changed files with 21 additions and 4 deletions

View File

@ -633,6 +633,11 @@ class Application(QApplication):
tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=win_id)
tabbed_browser.shutdown()
# Shut down IPC
try:
objreg.get('ipc-server').shutdown()
except KeyError:
pass
# Save everything
try:
config_obj = objreg.get('config')

View File

@ -45,10 +45,7 @@ class IPCServer(QObject):
def __init__(self, parent=None):
"""Start the IPC server and listen to commands."""
super().__init__(parent)
ok = QLocalServer.removeServer(SOCKETNAME)
if not ok:
raise IPCError("Error while removing server {}!".format(
SOCKETNAME))
self._remove_server()
self._server = QLocalServer(self)
ok = self._server.listen(SOCKETNAME)
if not ok:
@ -56,6 +53,13 @@ class IPCServer(QObject):
self._server.newConnection.connect(self.on_connection)
self._socket = None
def _remove_server(self):
"""Remove an existing server."""
ok = QLocalServer.removeServer(SOCKETNAME)
if not ok:
raise IPCError("Error while removing server {}!".format(
SOCKETNAME))
@pyqtSlot(int)
def on_error(self, error):
"""Convenience method which calls _socket_error on an error."""
@ -89,6 +93,14 @@ class IPCServer(QObject):
app = objreg.get('app')
app.process_args(args)
def shutdown(self):
"""Shut down the IPC server cleanly."""
if self._socket is not None:
self._socket.deleteLater()
self._socket = None
self._server.close()
self._server.deleteLater()
self._remove_server()
def init():
"""Initialize the global IPC server."""