summaryrefslogtreecommitdiff
path: root/qutebrowser/misc
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-03-29 19:26:28 +0200
committerFlorian Bruhin <me@the-compiler.org>2021-03-29 23:42:14 +0200
commit6fe5414f92acfa3ea0420b68f9765b36f6db8d5e (patch)
tree5caf50cddcb092adb6a47b35e9953c73638db494 /qutebrowser/misc
parent26c1b5b7d2f28507f99ecabf27347b4506e18373 (diff)
downloadqutebrowser-6fe5414f92acfa3ea0420b68f9765b36f6db8d5e.tar.gz
qutebrowser-6fe5414f92acfa3ea0420b68f9765b36f6db8d5e.zip
Revert "ipc: Remove _old_socket handling"
This reverts commit c6cf3067e158265096410afee98407826b19c472. Seems to cause segfaults: #0 0x00007ffff5cecbcc in void doActivate<false>(QObject*, int, void**) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 #1 0x00007ffff5be4e31 in QIODevice::channelReadyRead(int) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 #2 0x00007fffeffccb54 in QAbstractSocketPrivate::canReadNotification() () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Network.so.5 #3 0x00007fffeffdf061 in QReadNotifier::event(QEvent*) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Network.so.5 #4 0x00007ffff269e43c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5 #5 0x00007ffff26a4f20 in QApplication::notify(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5 #6 0x00007ffff318d0d6 in sipQApplication::notify(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/QtWidgets.abi3.so #7 0x00007ffff5cb4808 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 #8 0x00007ffff5d10d98 in socketNotifierSourceDispatch(_GSource*, int (*)(void*), void*) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 #9 0x00007ffff691df9c in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #10 0x00007ffff6971a49 in ?? () from /usr/lib/libglib-2.0.so.0 #11 0x00007ffff691b6f1 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #12 0x00007ffff5d101cc in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 #13 0x00007ffff5cb321a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 #14 0x00007ffff5cbc1d3 in QCoreApplication::exec() () from /home/florian/proj/qutebrowser/git/.tox/py39-pyqt515/lib/python3.9/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5
Diffstat (limited to 'qutebrowser/misc')
-rw-r--r--qutebrowser/misc/ipc.py27
1 files changed, 18 insertions, 9 deletions
diff --git a/qutebrowser/misc/ipc.py b/qutebrowser/misc/ipc.py
index aa63c1476..34c31ec4a 100644
--- a/qutebrowser/misc/ipc.py
+++ b/qutebrowser/misc/ipc.py
@@ -195,6 +195,7 @@ class IPCServer(QObject):
self.handle_connection)
self._socket = None
+ self._old_socket = None
if utils.is_windows: # pragma: no cover
# As a WORKAROUND for a Qt bug, we can't use UserAccessOption on Unix. If we
@@ -288,13 +289,12 @@ class IPCServer(QObject):
@pyqtSlot()
def on_disconnected(self):
"""Clean up socket when the client disconnected."""
- if self._socket is None:
- log.ipc.debug("Disconnected with None-socket.")
- return
log.ipc.debug("Client disconnected from socket 0x{:x}.".format(
id(self._socket)))
self._timer.stop()
- self._socket.deleteLater()
+ if self._old_socket is not None:
+ self._old_socket.deleteLater()
+ self._old_socket = self._socket
self._socket = None
# Maybe another connection is waiting.
self.handle_connection()
@@ -360,18 +360,27 @@ class IPCServer(QObject):
def on_ready_read(self):
"""Read json data from the client."""
if self._socket is None: # pragma: no cover
- return
+ # This happens when doing a connection while another one is already
+ # active for some reason.
+ if self._old_socket is None:
+ log.ipc.warning("In on_ready_read with None socket and "
+ "old_socket!")
+ return
+ log.ipc.debug("In on_ready_read with None socket!")
+ socket = self._old_socket
+ else:
+ socket = self._socket
- if sip.isdeleted(self._socket): # pragma: no cover
+ if sip.isdeleted(socket): # pragma: no cover
log.ipc.warning("Ignoring deleted IPC socket")
return
self._timer.stop()
- while self._socket is not None and self._socket.canReadLine():
- data = bytes(self._socket.readLine())
+ while socket is not None and socket.canReadLine():
+ data = bytes(socket.readLine())
self.got_raw.emit(data)
log.ipc.debug("Read from socket 0x{:x}: {!r}".format(
- id(self._socket), data))
+ id(socket), data))
self._handle_data(data)
if self._socket is not None: