From 62fb9fd2b4d6e1d8e0c06f70bb7ba08b1f286be7 Mon Sep 17 00:00:00 2001 From: sr Date: Tue, 5 Feb 2013 19:00:11 +0100 Subject: [SERVER/CLIENT] Wait for connection to close properly before deleting socket object --- src/client/net/serverconnection.cpp | 59 ++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 17 deletions(-) (limited to 'src/client/net/serverconnection.cpp') diff --git a/src/client/net/serverconnection.cpp b/src/client/net/serverconnection.cpp index 849f43b..6858f54 100644 --- a/src/client/net/serverconnection.cpp +++ b/src/client/net/serverconnection.cpp @@ -15,7 +15,7 @@ #define CHALLENGE_LEN 20 ServerConnection::ServerConnection(const QString& host, const quint16 port, const QByteArray& sessionName, const QByteArray& certHash) : - QObject(NULL), _jpegQuality(80), _authed(0), _sessionName(sessionName), _certHash(certHash) + QObject(NULL), _timerDelete(0), _jpegQuality(80), _authed(0), _sessionName(sessionName), _certHash(certHash) { _socket = new QSslSocket(); _blank = new BlankScreen(); @@ -37,7 +37,12 @@ ServerConnection::ServerConnection(const QString& host, const quint16 port, cons ServerConnection::~ServerConnection() { - this->disconnectFromServer(); + if (_socket != NULL) + { + qCritical("**** SOCKET DELETE IN DESTRUCTOR"); + _socket->deleteLater(); + } + qDebug("*** Server connection destroyed."); _blank->deleteLater(); _blank = NULL; } @@ -56,16 +61,19 @@ void ServerConnection::sendMessage(NetworkMessage& message) void ServerConnection::disconnectFromServer() { - if (_socket == NULL) - return; - qDebug("Closing connection to server"); - VncServer::instance()->stop(); - emit closeVnc(); - _socket->blockSignals(true); - _socket->abort(); - _socket->deleteLater(); - _socket = NULL; - this->deleteLater(); + if (_timerDelete == 0) + { + VncServer::instance()->stop(); + emit closeVnc(); + emit disconnected(); + _timerDelete = startTimer(500); + qDebug("Closing connection to server"); + if (_socket != NULL) + { + _socket->blockSignals(true); + _socket->abort(); + } + } } void ServerConnection::handleMsg() @@ -236,11 +244,28 @@ void ServerConnection::handleMsg() void ServerConnection::timerEvent(QTimerEvent *event) { - if (_timerId == 0) - return; - killTimer(_timerId); - _timerId = 0; - this->disconnectFromServer(); + if (event->timerId() == _timerId) + { + killTimer(_timerId); + _timerId = 0; + this->disconnectFromServer(); + } + else if (event->timerId() == _timerDelete) + { + if (_socket == NULL || _socket->state() == QAbstractSocket::UnconnectedState) + { + if (_socket != NULL) + _socket->deleteLater(); + _socket = NULL; + killTimer(_timerDelete); + this->deleteLater(); + return; + } + _socket->abort(); + qDebug("A socket is still pending..."); + } + else + killTimer(event->timerId()); } /** -- cgit v1.2.3-55-g7522