From ecf5bd3c4fd8557b06c6849b317d8d3ccaca528f Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 22 May 2016 13:12:02 +0200 Subject: A better crashhandler that notifies the client of the crash. --- common/listener.cpp | 17 +++++++++++++++++ common/listener.h | 1 + common/resourceaccess.cpp | 6 +++++- 3 files changed, 23 insertions(+), 1 deletion(-) (limited to 'common') diff --git a/common/listener.cpp b/common/listener.cpp index 28748e5..de20b2c 100644 --- a/common/listener.cpp +++ b/common/listener.cpp @@ -87,6 +87,23 @@ Listener::~Listener() { } +void Listener::emergencyAbortAllConnections() +{ + for (Client &client : m_connections) { + if (client.socket) { + Warning() << "Sending panic"; + client.socket->write("PANIC"); + client.socket->waitForBytesWritten(); + disconnect(client.socket, 0, this, 0); + client.socket->abort(); + delete client.socket; + client.socket = 0; + } + } + + m_connections.clear(); +} + void Listener::closeAllConnections() { for (Client &client : m_connections) { diff --git a/common/listener.h b/common/listener.h index cd1a7f6..5e376c7 100644 --- a/common/listener.h +++ b/common/listener.h @@ -64,6 +64,7 @@ signals: public slots: void closeAllConnections(); + void emergencyAbortAllConnections(); private slots: void acceptConnection(); diff --git a/common/resourceaccess.cpp b/common/resourceaccess.cpp index 458694f..991c930 100644 --- a/common/resourceaccess.cpp +++ b/common/resourceaccess.cpp @@ -474,7 +474,11 @@ void ResourceAccess::disconnected() void ResourceAccess::connectionError(QLocalSocket::LocalSocketError error) { - if (error == QLocalSocket::PeerClosedError) { + const bool resourceCrashed = d->partialMessageBuffer.contains("PANIC"); + if (resourceCrashed) { + ErrorMsg() << "The resource crashed!"; + d->abortPendingOperations(); + } else if (error == QLocalSocket::PeerClosedError) { Log() << "The resource closed the connection."; d->abortPendingOperations(); } else { -- cgit v1.2.3