diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-03-29 19:26:28 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-03-29 23:42:14 +0200 |
commit | 6fe5414f92acfa3ea0420b68f9765b36f6db8d5e (patch) | |
tree | 5caf50cddcb092adb6a47b35e9953c73638db494 /qutebrowser/misc | |
parent | 26c1b5b7d2f28507f99ecabf27347b4506e18373 (diff) | |
download | qutebrowser-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.py | 27 |
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: |