From e212eabe53878a8fa6ecb15909a325ed7dd63283 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 18 Jun 2018 00:07:51 +0200 Subject: [PATCH] identd: Ensure sockets are deleted when disconnected Don't leave stale sockets around; instead, have them delete themselves once disconnected. Use a QPointer in Request to be able to check for deletion before trying to access the socket. --- src/core/identserver.cpp | 23 +++++++++++++---------- src/core/identserver.h | 3 ++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/core/identserver.cpp b/src/core/identserver.cpp index e8f89bbd..c68d119e 100644 --- a/src/core/identserver.cpp +++ b/src/core/identserver.cpp @@ -95,6 +95,7 @@ void IdentServer::incomingConnection() while (server->hasPendingConnections()) { QTcpSocket *socket = server->nextPendingConnection(); connect(socket, SIGNAL(readyRead()), this, SLOT(respond())); + connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); } } @@ -143,21 +144,23 @@ void IdentServer::respond() void Request::respondSuccess(const QString &user) { - QString data = query + " : USERID : Quassel : " + user + "\r\n"; - - socket->write(data.toUtf8()); - socket->flush(); - socket->close(); + if (socket) { + QString data = query + " : USERID : Quassel : " + user + "\r\n"; + socket->write(data.toUtf8()); + socket->flush(); + socket->close(); + } } void Request::respondError(const QString &error) { - QString data = query + " : ERROR : " + error + "\r\n"; - - socket->write(data.toUtf8()); - socket->flush(); - socket->close(); + if (socket) { + QString data = query + " : ERROR : " + error + "\r\n"; + socket->write(data.toUtf8()); + socket->flush(); + socket->close(); + } } diff --git a/src/core/identserver.h b/src/core/identserver.h index 31204b2b..fac112c6 100644 --- a/src/core/identserver.h +++ b/src/core/identserver.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -32,7 +33,7 @@ struct Request { - QTcpSocket *socket; + QPointer socket; uint16_t localPort; QString query; qint64 transactionId; -- 2.20.1