SocketAPI: Remove listener immediately on lost connection
authorChristian Kamm <mail@ckamm.de>
Thu, 17 Jan 2019 09:21:22 +0000 (10:21 +0100)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:36 +0000 (10:58 +0100)
To avoid situations where messages are attempted to be sent to dead
connections.

src/gui/socketapi.cpp

index ac1aea1a2340752eb218d1c99c3e8bc64d290120..a420332115fc577b0a9db1c96b1798de8816e981 100644 (file)
@@ -270,6 +270,10 @@ void SocketApi::onLostConnection()
 {
     qCInfo(lcSocketApi) << "Lost connection " << sender();
     sender()->deleteLater();
+
+    auto socket = qobject_cast<QIODevice *>(sender());
+    ASSERT(socket);
+    _listeners.erase(std::remove_if(_listeners.begin(), _listeners.end(), ListenerHasSocketPred(socket)), _listeners.end());
 }
 
 void SocketApi::slotSocketDestroyed(QObject *obj)