diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-03-29 19:32:42 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-03-29 23:45:38 +0200 |
commit | 5c14bfd8c6670519e06d01115624de8c6afd49a5 (patch) | |
tree | c3e64f75faf16d96f541354262e429c339cc2660 | |
parent | 76c8d20f6a678e39359775a1a6d727633ada7ec7 (diff) | |
download | qutebrowser-5c14bfd8c6670519e06d01115624de8c6afd49a5.tar.gz qutebrowser-5c14bfd8c6670519e06d01115624de8c6afd49a5.zip |
ipc: Fix socket handling
Speculatively fixes #5344
(cherry picked from commit 4a2c6c76241d6554e5fa3cfe358cfe16646728a0)
-rw-r--r-- | qutebrowser/misc/ipc.py | 22 | ||||
-rw-r--r-- | tests/unit/misc/test_ipc.py | 2 |
2 files changed, 15 insertions, 9 deletions
diff --git a/qutebrowser/misc/ipc.py b/qutebrowser/misc/ipc.py index 34c31ec4a..86f0422f3 100644 --- a/qutebrowser/misc/ipc.py +++ b/qutebrowser/misc/ipc.py @@ -356,32 +356,38 @@ class IPCServer(QObject): self.got_args.emit(args, target_arg, cwd) - @pyqtSlot() - def on_ready_read(self): - """Read json data from the client.""" + def _get_socket(self): + """Get the current socket for on_ready_read.""" if self._socket is None: # pragma: no cover # 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!") + log.ipc.warning("In _get_socket with None socket and old_socket!") + return None + log.ipc.debug("In _get_socket with None socket!") socket = self._old_socket else: socket = self._socket if sip.isdeleted(socket): # pragma: no cover log.ipc.warning("Ignoring deleted IPC socket") - return + return None + return socket + + @pyqtSlot() + def on_ready_read(self): + """Read json data from the client.""" self._timer.stop() + + socket = self._get_socket() 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(socket), data)) self._handle_data(data) + socket = self._get_socket() if self._socket is not None: self._timer.start() diff --git a/tests/unit/misc/test_ipc.py b/tests/unit/misc/test_ipc.py index c19d0bc42..7df7d53c4 100644 --- a/tests/unit/misc/test_ipc.py +++ b/tests/unit/misc/test_ipc.py @@ -605,7 +605,7 @@ def test_ipcserver_socket_none_readyread(ipc_server, caplog): assert ipc_server._old_socket is None with caplog.at_level(logging.WARNING): ipc_server.on_ready_read() - msg = "In on_ready_read with None socket and old_socket!" + msg = "In _get_socket with None socket and old_socket!" assert msg in caplog.messages |