Remove ProtocolHandlerDeleter
It has only a one time use and there is a nicer way to do that. Found by an Axivion scan. Task-number: QTBUG-125026 Change-Id: I9de8263fe1ea55608a8129f990b490e2f86e9479 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
aea27282b7
commit
a99b9aedf1
@ -27,20 +27,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
|
|
||||||
class ProtocolHandlerDeleter : public QObject
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit ProtocolHandlerDeleter(QAbstractProtocolHandler *h) : handler(h) {}
|
|
||||||
~ProtocolHandlerDeleter() { delete handler; }
|
|
||||||
private:
|
|
||||||
QAbstractProtocolHandler *handler = nullptr;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Put channel specific stuff here so it does not pollute qhttpnetworkconnection.cpp
|
// TODO: Put channel specific stuff here so it does not pollute qhttpnetworkconnection.cpp
|
||||||
|
|
||||||
// Because in-flight when sending a request, the server might close our connection (because the persistent HTTP
|
// Because in-flight when sending a request, the server might close our connection (because the persistent HTTP
|
||||||
@ -475,18 +461,12 @@ void QHttpNetworkConnectionChannel::allDone()
|
|||||||
|
|
||||||
// As allDone() gets called from the protocol handler, it's not yet
|
// As allDone() gets called from the protocol handler, it's not yet
|
||||||
// safe to delete it. There is no 'deleteLater', since
|
// safe to delete it. There is no 'deleteLater', since
|
||||||
// QAbstractProtocolHandler is not a QObject. Instead we do this
|
// QAbstractProtocolHandler is not a QObject. Instead delete it in
|
||||||
// trick with ProtocolHandlerDeleter, a QObject-derived class.
|
// a queued emission.
|
||||||
// These dances below just make it somewhat exception-safe.
|
|
||||||
// 1. Create a new owner:
|
QMetaObject::invokeMethod(this, [oldHandler = std::move(protocolHandler)]() mutable {
|
||||||
QAbstractProtocolHandler *oldHandler = protocolHandler.get();
|
oldHandler.reset();
|
||||||
auto deleter = std::make_unique<ProtocolHandlerDeleter>(oldHandler);
|
}, Qt::QueuedConnection);
|
||||||
// 2. Retire the old one:
|
|
||||||
Q_UNUSED(protocolHandler.release());
|
|
||||||
// 3. Call 'deleteLater':
|
|
||||||
deleter->deleteLater();
|
|
||||||
// 3. Give up the ownerthip:
|
|
||||||
Q_UNUSED(deleter.release());
|
|
||||||
|
|
||||||
connection->fillHttp2Queue();
|
connection->fillHttp2Queue();
|
||||||
protocolHandler.reset(new QHttp2ProtocolHandler(this));
|
protocolHandler.reset(new QHttp2ProtocolHandler(this));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user