diff --git a/src/core/defercall.h b/src/core/defercall.h index cdd0f7d9a..e4c76eef8 100644 --- a/src/core/defercall.h +++ b/src/core/defercall.h @@ -48,7 +48,7 @@ class DeferCall : public QObject template static void deleteLater(T *p) { - global()->defer([=]() { delete p; }); + global()->defer([=] { delete p; }); } private slots: diff --git a/src/core/processquit.cpp b/src/core/processquit.cpp index 43d848754..718e1ef7a 100644 --- a/src/core/processquit.cpp +++ b/src/core/processquit.cpp @@ -38,6 +38,8 @@ # include #endif +#include "defercall.h" + namespace { // safeobj stuff, from qca @@ -46,7 +48,7 @@ void releaseAndDeleteLater(QObject *owner, QObject *obj) { obj->disconnect(owner); obj->setParent(0); - obj->deleteLater(); + DeferCall::deleteLater(obj); } class SafeSocketNotifier : public QObject diff --git a/src/core/simplehttpserver.cpp b/src/core/simplehttpserver.cpp index bf395dbeb..ba5159752 100644 --- a/src/core/simplehttpserver.cpp +++ b/src/core/simplehttpserver.cpp @@ -30,6 +30,7 @@ #include #include #include "log.h" +#include "defercall.h" #include "httpheaders.h" class SimpleHttpRequest::Private : public QObject @@ -84,7 +85,7 @@ class SimpleHttpRequest::Private : public QObject { sock->disconnect(this); sock->setParent(0); - sock->deleteLater(); + DeferCall::deleteLater(sock); sock = 0; } } diff --git a/src/core/statsmanager.cpp b/src/core/statsmanager.cpp index 504bde0b7..417587f52 100644 --- a/src/core/statsmanager.cpp +++ b/src/core/statsmanager.cpp @@ -32,6 +32,7 @@ #include "qzmqsocket.h" #include "timerwheel.h" #include "log.h" +#include "defercall.h" #include "tnetstring.h" #include "httpheaders.h" #include "simplehttpserver.h" @@ -1560,7 +1561,7 @@ class StatsManager::Private : public QObject ).arg(prometheusPrefix, m.name, m.help, prometheusPrefix, m.name, m.type, prometheusPrefix, m.name, value.toString()); } - req->finished.connect(boost::bind(&SimpleHttpRequest::deleteLater, req)); + req->finished.connect([=] { DeferCall::deleteLater(req); }); HttpHeaders headers; headers += HttpHeader("Content-Type", "text/plain"); diff --git a/src/core/zwebsocket.cpp b/src/core/zwebsocket.cpp index d6ee4e220..644df5409 100644 --- a/src/core/zwebsocket.cpp +++ b/src/core/zwebsocket.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2014-2023 Fanout, Inc. - * Copyright (C) 2023-2024 Fastly, Inc. + * Copyright (C) 2023-2025 Fastly, Inc. * * This file is part of Pushpin. * @@ -29,6 +29,7 @@ #include "zhttpresponsepacket.h" #include "log.h" #include "rtimer.h" +#include "defercall.h" #include "zhttpmanager.h" #include "uuidutil.h" @@ -151,7 +152,7 @@ class ZWebSocket::Private : public QObject { expireTimerConnection.disconnect(); expireTimer->setParent(0); - expireTimer->deleteLater(); + DeferCall::deleteLater(expireTimer); expireTimer = 0; } @@ -159,7 +160,7 @@ class ZWebSocket::Private : public QObject { keepAliveTimerConnection.disconnect(); keepAliveTimer->setParent(0); - keepAliveTimer->deleteLater(); + DeferCall::deleteLater(keepAliveTimer); keepAliveTimer = 0; } diff --git a/src/handler/handlerengine.cpp b/src/handler/handlerengine.cpp index 6c2809b56..e41118b1d 100644 --- a/src/handler/handlerengine.cpp +++ b/src/handler/handlerengine.cpp @@ -37,6 +37,7 @@ #include "qtcompat.h" #include "tnetstring.h" #include "rtimer.h" +#include "defercall.h" #include "log.h" #include "logutil.h" #include "packet/httprequestdata.h" @@ -1178,7 +1179,7 @@ class Subscription : public QObject timer_->stop(); timer_->disconnect(this); timer_->setParent(0); - timer_->deleteLater(); + DeferCall::deleteLater(timer_); } } @@ -1770,7 +1771,7 @@ class HandlerEngine::Private : public QObject outHeaders += HttpHeader("Content-Type", "text/plain"); req->respond(code, reason, outHeaders, body.toUtf8()); - req->finished.connect(boost::bind(&SimpleHttpRequest::deleteLater, req)); + req->finished.connect([=] { DeferCall::deleteLater(req); }); QString msg = QString("control: %1 %2 code=%3 %4").arg(req->requestMethod(), QString::fromUtf8(req->requestUri()), QString::number(code), QString::number(body.size())); if(items > -1) @@ -3154,7 +3155,7 @@ private slots: hs->subscribeCallback().remove(this); hs->unsubscribeCallback().remove(this); hs->finishedCallback().remove(this); - hs->deleteLater(); + DeferCall::deleteLater(hs); if(!rp.requests.isEmpty()) writeRetryPacket(addr, rp); diff --git a/src/handler/httpsession.cpp b/src/handler/httpsession.cpp index ca4c9e5cd..14584fa2f 100644 --- a/src/handler/httpsession.cpp +++ b/src/handler/httpsession.cpp @@ -31,6 +31,7 @@ #include #include "qtcompat.h" #include "rtimer.h" +#include "defercall.h" #include "log.h" #include "bufferlist.h" #include "packet/retryrequestpacket.h" @@ -264,11 +265,11 @@ class HttpSession::Private : public QObject timerConnection.disconnect(); timer->setParent(0); - timer->deleteLater(); + DeferCall::deleteLater(timer); retryTimerConnection.disconnect(); retryTimer->setParent(0); - retryTimer->deleteLater(); + DeferCall::deleteLater(retryTimer); } void start() diff --git a/src/handler/httpsessionupdatemanager.cpp b/src/handler/httpsessionupdatemanager.cpp index 1f403f07b..210b046da 100644 --- a/src/handler/httpsessionupdatemanager.cpp +++ b/src/handler/httpsessionupdatemanager.cpp @@ -24,6 +24,7 @@ #include #include +#include "defercall.h" #include "httpsession.h" class HttpSessionUpdateManager::Private : public QObject @@ -61,7 +62,7 @@ class HttpSessionUpdateManager::Private : public QObject bucket->timer->disconnect(this); bucket->timer->setParent(0); - bucket->timer->deleteLater(); + DeferCall::deleteLater(bucket->timer); delete bucket; } } @@ -76,7 +77,7 @@ class HttpSessionUpdateManager::Private : public QObject bucket->timer->disconnect(this); bucket->timer->setParent(0); - bucket->timer->deleteLater(); + DeferCall::deleteLater(bucket->timer); delete bucket; } diff --git a/src/handler/ratelimiter.cpp b/src/handler/ratelimiter.cpp index fcf348aa8..92af28247 100644 --- a/src/handler/ratelimiter.cpp +++ b/src/handler/ratelimiter.cpp @@ -26,6 +26,7 @@ #include #include #include +#include "defercall.h" #define MIN_BATCH_INTERVAL 25 @@ -95,7 +96,7 @@ class RateLimiter::Private : public QObject { timer->disconnect(this); timer->setParent(0); - timer->deleteLater(); + DeferCall::deleteLater(timer); } void setRate(int actionsPerSecond) diff --git a/src/handler/sequencer.cpp b/src/handler/sequencer.cpp index a5dee9ba9..cd557aa77 100644 --- a/src/handler/sequencer.cpp +++ b/src/handler/sequencer.cpp @@ -25,6 +25,7 @@ #include #include #include "log.h" +#include "defercall.h" #include "publishitem.h" #include "publishlastids.h" @@ -88,7 +89,7 @@ class Sequencer::Private : public QObject { expireTimer->disconnect(this); expireTimer->setParent(0); - expireTimer->deleteLater(); + DeferCall::deleteLater(expireTimer); qDeleteAll(idCacheById); } diff --git a/src/handler/wssession.cpp b/src/handler/wssession.cpp index b52e30892..1a39fb524 100644 --- a/src/handler/wssession.cpp +++ b/src/handler/wssession.cpp @@ -26,6 +26,7 @@ #include #include #include "log.h" +#include "defercall.h" #include "filter.h" #include "publishitem.h" #include "publishformat.h" @@ -57,15 +58,15 @@ WsSession::~WsSession() { expireTimer->disconnect(this); expireTimer->setParent(0); - expireTimer->deleteLater(); + DeferCall::deleteLater(expireTimer); delayedTimer->disconnect(this); delayedTimer->setParent(0); - delayedTimer->deleteLater(); + DeferCall::deleteLater(delayedTimer); requestTimer->disconnect(this); requestTimer->setParent(0); - requestTimer->deleteLater(); + DeferCall::deleteLater(requestTimer); } void WsSession::refreshExpiration() diff --git a/src/proxy/engine.cpp b/src/proxy/engine.cpp index 6f578a8ac..ea7182a71 100644 --- a/src/proxy/engine.cpp +++ b/src/proxy/engine.cpp @@ -34,6 +34,7 @@ #include "packet/zrpcrequestpacket.h" #include "qtcompat.h" #include "rtimer.h" +#include "defercall.h" #include "log.h" #include "inspectdata.h" #include "zhttpmanager.h" @@ -861,7 +862,7 @@ class Engine::Private : public QObject delete i; ps->finishedByPassthroughCallback().remove(this); - ps->deleteLater(); + DeferCall::deleteLater(ps); tryTakeNext(); } diff --git a/src/proxy/wsproxysession.cpp b/src/proxy/wsproxysession.cpp index ace6a1895..857643315 100644 --- a/src/proxy/wsproxysession.cpp +++ b/src/proxy/wsproxysession.cpp @@ -33,6 +33,7 @@ #include "packet/httprequestdata.h" #include "log.h" #include "rtimer.h" +#include "defercall.h" #include "jwt.h" #include "zhttpmanager.h" #include "zwebsocket.h" @@ -386,7 +387,7 @@ class WsProxySession::Private : public QObject { keepAliveConnection.disconnect(); keepAliveTimer->setParent(0); - keepAliveTimer->deleteLater(); + DeferCall::deleteLater(keepAliveTimer); keepAliveTimer = 0; } }