From cd96632965e26f03a2a0a61d98598f1c98d57d72 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@digia.com>
Date: Mon, 18 Feb 2013 16:27:42 +0100
Subject: [PATCH] QtSingleApplication: Don't hang if client does not send data

Do not wait forever when trying to read data from a connection. The
client might already have been giving up, and the socket therefore
become invalid without any data arriving.

Task-number: QTCREATORBUG-6467
Change-Id: Ie2e52709c92c25539491315bb5106b653df3fe8e
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
---
 src/shared/qtsingleapplication/qtlocalpeer.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/shared/qtsingleapplication/qtlocalpeer.cpp b/src/shared/qtsingleapplication/qtlocalpeer.cpp
index 824a2062b59..6410db3195a 100644
--- a/src/shared/qtsingleapplication/qtlocalpeer.cpp
+++ b/src/shared/qtsingleapplication/qtlocalpeer.cpp
@@ -139,8 +139,11 @@ void QtLocalPeer::receiveConnection()
         return;
 
     // Why doesn't Qt have a blocking stream that takes care of this shait???
-    while (socket->bytesAvailable() < static_cast<int>(sizeof(quint32)))
-        socket->waitForReadyRead();
+    while (socket->bytesAvailable() < static_cast<int>(sizeof(quint32))) {
+        if (!socket->isValid()) // stale request
+            return;
+        socket->waitForReadyRead(1000);
+    }
     QDataStream ds(socket);
     QByteArray uMsg;
     quint32 remaining;
-- 
GitLab