diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-04-04 10:49:11 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-04-04 09:01:18 +0000 |
commit | c54614c8c066c68e8a3b6573eb0b9a6ee2f7b70d (patch) | |
tree | 3e3883b978abcbc1b2779f411baa53100f4dc813 | |
parent | 3a9aa1a0beeef9c39f92b103460b5a754df90667 (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.cpp | 10 | ||||
-rw-r--r-- | src/lib/corelib/tools/launchersocket.h | 1 |
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(); |