summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-03-29 19:32:42 +0200
committerFlorian Bruhin <me@the-compiler.org>2021-03-29 23:45:38 +0200
commit5c14bfd8c6670519e06d01115624de8c6afd49a5 (patch)
treec3e64f75faf16d96f541354262e429c339cc2660
parent76c8d20f6a678e39359775a1a6d727633ada7ec7 (diff)
downloadqutebrowser-5c14bfd8c6670519e06d01115624de8c6afd49a5.tar.gz
qutebrowser-5c14bfd8c6670519e06d01115624de8c6afd49a5.zip
ipc: Fix socket handling
Speculatively fixes #5344 (cherry picked from commit 4a2c6c76241d6554e5fa3cfe358cfe16646728a0)
-rw-r--r--qutebrowser/misc/ipc.py22
-rw-r--r--tests/unit/misc/test_ipc.py2
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