From c71db0da037f80bfd0063b30f4265edba120bcc7 Mon Sep 17 00:00:00 2001 From: Sima <64804941+sima-fastly@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:52:32 -0800 Subject: [PATCH] boostificaiton fixes (#47894) --- src/cpp/handler/handlerengine.cpp | 4 +-- src/cpp/processquit.cpp | 7 ++-- src/cpp/proxy/sockjsmanager.cpp | 56 +++++++++++++++++------------ src/cpp/proxy/sockjssession.cpp | 16 ++++----- src/cpp/proxy/websocketoverhttp.cpp | 2 +- src/cpp/qzmq/src/qzmqsocket.cpp | 2 +- src/cpp/zrpcmanager.cpp | 2 +- src/cpp/zrpcrequest.cpp | 6 ++-- 8 files changed, 51 insertions(+), 44 deletions(-) diff --git a/src/cpp/handler/handlerengine.cpp b/src/cpp/handler/handlerengine.cpp index 9eee0a11..cb607be4 100644 --- a/src/cpp/handler/handlerengine.cpp +++ b/src/cpp/handler/handlerengine.cpp @@ -1054,7 +1054,7 @@ class AcceptWorker : public Deferred rp.route = route.toUtf8(); rp.retrySeq = stats->lastRetrySeq(); - emit retryPacketReady(rp); + retryPacketReady(rp); setFinished(true); return; @@ -1119,7 +1119,7 @@ class AcceptWorker : public Deferred // engine should directly connect to this and register the holds // immediately, to avoid a race with the lastId check - emit sessionsReady(); + sessionsReady(); setFinished(true); } diff --git a/src/cpp/processquit.cpp b/src/cpp/processquit.cpp index 79a52265..e1dd0c0b 100644 --- a/src/cpp/processquit.cpp +++ b/src/cpp/processquit.cpp @@ -60,7 +60,7 @@ class SafeSocketNotifier : public QObject QObject(parent) { sn = new QSocketNotifier(socket, type, this); - connect(sn, SIGNAL(activated(int)), SLOT(doActivated())); + connect(sn, &QSocketNotifier::activated, this, &SafeSocketNotifier::doActivated); } ~SafeSocketNotifier() @@ -82,10 +82,9 @@ public slots: private: QSocketNotifier *sn; -private slots: - void doActivated() + void doActivated(int sock) { - activated(sn->socket()); + activated(sock); } }; diff --git a/src/cpp/proxy/sockjsmanager.cpp b/src/cpp/proxy/sockjsmanager.cpp index 76692424..b26ca31a 100644 --- a/src/cpp/proxy/sockjsmanager.cpp +++ b/src/cpp/proxy/sockjsmanager.cpp @@ -37,6 +37,8 @@ #include "zwebsocket.h" #include "sockjssession.h" +using std::map; + #define MAX_REQUEST_BODY 100000 const char *iframeHtmlTemplate = @@ -68,6 +70,12 @@ static QByteArray serializeJsonString(const QString &s) return tmp.mid(1, tmp.length() - 2); } +struct ZhttpReqConnections{ + Connection readyReadConnection; + Connection bytesWrittenConnection; + Connection errorConnection; +}; + class SockJsManager::Private : public QObject { Q_OBJECT @@ -110,7 +118,11 @@ class SockJsManager::Private : public QObject ~Session() { - delete req; + if(req) + { + owner->reqConnectionMap.erase(req); + delete req; + } delete sock; if(timer) @@ -133,9 +145,7 @@ class SockJsManager::Private : public QObject QByteArray iframeHtml; QByteArray iframeHtmlEtag; QSet discardedRequests; - Connection readyReadConnection; - Connection bytesWrittenConnection; - Connection errorConnection; + map reqConnectionMap; Private(SockJsManager *_q, const QString &sockJsUrl) : QObject(_q), @@ -241,9 +251,11 @@ class SockJsManager::Private : public QObject s->route = route; - readyReadConnection = req->readyRead.connect(boost::bind(&Private::req_readyRead, this)); - bytesWrittenConnection = req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1)); - errorConnection = req->error.connect(boost::bind(&Private::req_error, this)); + reqConnectionMap[req] = { + req->readyRead.connect(boost::bind(&Private::req_readyRead, this, req)), + req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1, req)), + req->error.connect(boost::bind(&Private::req_error, this, req)) + }; sessions += s; sessionsByRequest.insert(s->req, s); @@ -364,9 +376,11 @@ class SockJsManager::Private : public QObject { discardedRequests += req; - readyReadConnection = req->readyRead.connect(boost::bind(&Private::req_readyRead, this)); - bytesWrittenConnection = req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1)); - errorConnection = req->error.connect(boost::bind(&Private::req_error, this)); + reqConnectionMap[req] = { + req->readyRead.connect(boost::bind(&Private::req_readyRead, this, req)), + req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1, req)), + req->error.connect(boost::bind(&Private::req_error, this, req)) + }; } HttpHeaders headers; @@ -484,7 +498,7 @@ class SockJsManager::Private : public QObject sessionsById.insert(s->sid, s); s->pending = true; pendingSessions += s; - emit q->sessionReady(); + q->sessionReady(); return; } } @@ -499,7 +513,7 @@ class SockJsManager::Private : public QObject { s->pending = true; pendingSessions += s; - emit q->sessionReady(); + q->sessionReady(); return; } else @@ -514,7 +528,7 @@ class SockJsManager::Private : public QObject s->lastPart = lastPart; s->pending = true; pendingSessions += s; - emit q->sessionReady(); + q->sessionReady(); return; } @@ -575,11 +589,8 @@ class SockJsManager::Private : public QObject return s->ext; } -private slots: - void req_readyRead() + void req_readyRead(ZhttpRequest *req) { - ZhttpRequest *req = (ZhttpRequest *)sender(); - // for a request to have been discardable, we must have read the // entire input already and handed to the session assert(!discardedRequests.contains(req)); @@ -590,17 +601,16 @@ private slots: processRequestInput(s); } - void req_bytesWritten(int count) + void req_bytesWritten(int count, ZhttpRequest *req) { Q_UNUSED(count); - ZhttpRequest *req = (ZhttpRequest *)sender(); - if(discardedRequests.contains(req)) { if(req->isFinished()) { discardedRequests.remove(req); + reqConnectionMap.erase(req); delete req; } @@ -617,13 +627,12 @@ private slots: } } - void req_error() + void req_error(ZhttpRequest *req) { - ZhttpRequest *req = (ZhttpRequest *)sender(); - if(discardedRequests.contains(req)) { discardedRequests.remove(req); + reqConnectionMap.erase(req); delete req; return; } @@ -637,6 +646,7 @@ private slots: removeSession(s); } +private slots: void sock_closed() { ZWebSocket *sock = (ZWebSocket *)sender(); diff --git a/src/cpp/proxy/sockjssession.cpp b/src/cpp/proxy/sockjssession.cpp index 099fe52f..e3df9adb 100644 --- a/src/cpp/proxy/sockjssession.cpp +++ b/src/cpp/proxy/sockjssession.cpp @@ -256,8 +256,8 @@ class SockJsSession::Private : public QObject requests.insert(req, new RequestItem(req, jsonpCallback, RequestItem::Connect)); - bytesWrittenConnection = req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1)); - errorConnection = req->error.connect(boost::bind(&Private::req_error, this)); + bytesWrittenConnection = req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1, req)); + errorConnection = req->error.connect(boost::bind(&Private::req_error, this, req)); } else { @@ -297,8 +297,8 @@ class SockJsSession::Private : public QObject void handleRequest(ZhttpRequest *_req, const QByteArray &jsonpCallback, const QByteArray &lastPart, const QByteArray &body) { - bytesWrittenConnection = _req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1)); - errorConnection = _req->error.connect(boost::bind(&Private::req_error, this)); + bytesWrittenConnection = _req->bytesWritten.connect(boost::bind(&Private::req_bytesWritten, this, boost::placeholders::_1, req)); + errorConnection = _req->error.connect(boost::bind(&Private::req_error, this, req)); if(lastPart == "xhr" || lastPart == "jsonp") { @@ -871,12 +871,10 @@ class SockJsSession::Private : public QObject return closeValue; } -private slots: - void req_bytesWritten(int count) + void req_bytesWritten(int count, ZhttpRequest *_req) { Q_UNUSED(count); - ZhttpRequest *_req = (ZhttpRequest *)sender(); RequestItem *ri = requests.value(_req); assert(ri); @@ -929,9 +927,8 @@ private slots: } } - void req_error() + void req_error(ZhttpRequest *_req) { - ZhttpRequest *_req = (ZhttpRequest *)sender(); RequestItem *ri = requests.value(_req); assert(ri); @@ -972,6 +969,7 @@ private slots: } } +private slots: void sock_readyRead() { if(mode == WebSocketFramed) diff --git a/src/cpp/proxy/websocketoverhttp.cpp b/src/cpp/proxy/websocketoverhttp.cpp index 640661cc..4d10f39d 100644 --- a/src/cpp/proxy/websocketoverhttp.cpp +++ b/src/cpp/proxy/websocketoverhttp.cpp @@ -641,7 +641,6 @@ class WebSocketOverHttp::Private : public QObject req->endBody(); } -private slots: void req_readyRead() { if(inBuf.size() + req->bytesAvailable() > RESPONSE_BODY_MAX) @@ -981,6 +980,7 @@ private slots: emit q->error(); } +private slots: void keepAliveTimer_timeout() { update(); diff --git a/src/cpp/qzmq/src/qzmqsocket.cpp b/src/cpp/qzmq/src/qzmqsocket.cpp index edd38b88..e23c3df2 100644 --- a/src/cpp/qzmq/src/qzmqsocket.cpp +++ b/src/cpp/qzmq/src/qzmqsocket.cpp @@ -407,7 +407,7 @@ class Socket::Private : public QObject assert(sock != NULL); sn_read = new QSocketNotifier(get_fd(sock), QSocketNotifier::Read, this); - connect(sn_read, SIGNAL(activated(int)), SLOT(sn_read_activated())); + connect(sn_read, &QSocketNotifier::activated, this, &Private::sn_read_activated); sn_read->setEnabled(true); updateTimer = new QTimer(this); diff --git a/src/cpp/zrpcmanager.cpp b/src/cpp/zrpcmanager.cpp index 914e4ae8..1636824f 100644 --- a/src/cpp/zrpcmanager.cpp +++ b/src/cpp/zrpcmanager.cpp @@ -249,7 +249,7 @@ class ZrpcManager::Private : public QObject if(pending.count() >= PENDING_MAX) serverValve->close(); - emit q->requestReady(); + q->requestReady(); } }; diff --git a/src/cpp/zrpcrequest.cpp b/src/cpp/zrpcrequest.cpp index 79e7cf36..99e9deb7 100644 --- a/src/cpp/zrpcrequest.cpp +++ b/src/cpp/zrpcrequest.cpp @@ -132,7 +132,7 @@ class ZrpcRequest::Private : public QObject q->onError(); } - emit q->finished(); + q->finished(); } private slots: @@ -144,7 +144,7 @@ private slots: condition = ErrorUnavailable; conditionString = "service-unavailable"; cleanup(); - emit q->finished(); + q->finished(); return; } @@ -170,7 +170,7 @@ private slots: condition = ErrorTimeout; conditionString = "timeout"; cleanup(); - emit q->finished(); + q->finished(); } };