diff options
Diffstat (limited to 'src/httpserver/qabstracthttpserver.cpp')
-rw-r--r-- | src/httpserver/qabstracthttpserver.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/httpserver/qabstracthttpserver.cpp b/src/httpserver/qabstracthttpserver.cpp index 2b699ed..5a6e1e5 100644 --- a/src/httpserver/qabstracthttpserver.cpp +++ b/src/httpserver/qabstracthttpserver.cpp @@ -63,8 +63,12 @@ void QAbstractHttpServerPrivate::handleNewConnections() handleReadyRead(socket, request); }); - QObject::connect(socket, &QTcpSocket::disconnected, &QObject::deleteLater); - QObject::connect(socket, &QObject::destroyed, [request] () { + QObject::connect(socket, &QTcpSocket::disconnected, socket, [request, socket] () { + if (!request->d->handling) + socket->deleteLater(); + }); + + QObject::connect(socket, &QObject::destroyed, socket, [request] () { delete request; }); } @@ -118,8 +122,12 @@ void QAbstractHttpServerPrivate::handleReadyRead(QTcpSocket *socket, } socket->commitTransaction(); + request->d->handling = true; if (!q->handleRequest(*request, socket)) Q_EMIT q->missingHandler(*request, socket); + request->d->handling = false; + if (socket->state() == QAbstractSocket::UnconnectedState) + socket->deleteLater(); } QAbstractHttpServer::QAbstractHttpServer(QObject *parent) |