summaryrefslogtreecommitdiffstats
path: root/src/httpserver/qabstracthttpserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/httpserver/qabstracthttpserver.cpp')
-rw-r--r--src/httpserver/qabstracthttpserver.cpp12
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)