identd: Ensure sockets are deleted when disconnected
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 17 Jun 2018 22:07:51 +0000 (00:07 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 18 Jun 2018 19:25:50 +0000 (21:25 +0200)
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
src/core/identserver.h

index e8f89bb..c68d119 100644 (file)
@@ -95,6 +95,7 @@ void IdentServer::incomingConnection()
     while (server->hasPendingConnections()) {
         QTcpSocket *socket = server->nextPendingConnection();
         connect(socket, SIGNAL(readyRead()), this, SLOT(respond()));
     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)
 {
 
 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)
 {
 }
 
 
 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();
+    }
 }
 
 
 }
 
 
index 31204b2..fac112c 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <QHash>
 #include <QObject>
 
 #include <QHash>
 #include <QObject>
+#include <QPointer>
 #include <QString>
 #include <QTcpServer>
 #include <QTcpSocket>
 #include <QString>
 #include <QTcpServer>
 #include <QTcpSocket>
@@ -32,7 +33,7 @@
 
 struct Request
 {
 
 struct Request
 {
-    QTcpSocket *socket;
+    QPointer<QTcpSocket> socket;
     uint16_t localPort;
     QString query;
     qint64 transactionId;
     uint16_t localPort;
     QString query;
     qint64 transactionId;