aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-04-04 10:49:11 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-04-04 09:01:18 +0000
commitc54614c8c066c68e8a3b6573eb0b9a6ee2f7b70d (patch)
tree3e3883b978abcbc1b2779f411baa53100f4dc813
parent3a9aa1a0beeef9c39f92b103460b5a754df90667 (diff)
Process launcher: Work around platform-specific QLocalSocket behavior
When the peer disconnects, we get QLocalSocket::PeerClosedError on Unix, but not on Windows. So also connect to the disconnected() signal. Change-Id: I42b9fdf0f720c32c96fc70dd29b651c547f2ead0 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/lib/corelib/tools/launchersocket.cpp10
-rw-r--r--src/lib/corelib/tools/launchersocket.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/src/lib/corelib/tools/launchersocket.cpp b/src/lib/corelib/tools/launchersocket.cpp
index 98142aac3..69b431c7e 100644
--- a/src/lib/corelib/tools/launchersocket.cpp
+++ b/src/lib/corelib/tools/launchersocket.cpp
@@ -85,12 +85,15 @@ void LauncherSocket::setSocket(QLocalSocket *socket)
this, &LauncherSocket::handleSocketError);
connect(m_socket, &QLocalSocket::readyRead,
this, &LauncherSocket::handleSocketDataAvailable);
+ connect(m_socket, &QLocalSocket::disconnected,
+ this, &LauncherSocket::handleSocketDisconnected);
emit ready();
}
void LauncherSocket::handleSocketError()
{
- handleError(Tr::tr("Socket error: %1").arg(m_socket->errorString()));
+ if (m_socket->error() != QLocalSocket::PeerClosedError)
+ handleError(Tr::tr("Socket error: %1").arg(m_socket->errorString()));
}
void LauncherSocket::handleSocketDataAvailable()
@@ -116,6 +119,11 @@ void LauncherSocket::handleSocketDataAvailable()
handleSocketDataAvailable();
}
+void LauncherSocket::handleSocketDisconnected()
+{
+ handleError(Tr::tr("Launcher socket closed unexpectedly"));
+}
+
void LauncherSocket::handleError(const QString &error)
{
m_socket->disconnect();
diff --git a/src/lib/corelib/tools/launchersocket.h b/src/lib/corelib/tools/launchersocket.h
index 200cbf829..3b4dc985e 100644
--- a/src/lib/corelib/tools/launchersocket.h
+++ b/src/lib/corelib/tools/launchersocket.h
@@ -77,6 +77,7 @@ private:
void handleSocketError();
void handleSocketDataAvailable();
+ void handleSocketDisconnected();
void handleError(const QString &error);
void handleRequests();