From cf597268d6be68446e8cd8fab2a23e30d897055f Mon Sep 17 00:00:00 2001 From: sima-fastly Date: Mon, 29 Jan 2024 13:40:07 -0800 Subject: [PATCH] total req session boostificaiton --- src/cpp/proxy/engine.cpp | 9 +++------ src/cpp/proxy/proxysession.cpp | 11 +++++------ src/cpp/proxy/requestsession.cpp | 10 +++++++--- src/cpp/proxy/requestsession.h | 4 +--- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/cpp/proxy/engine.cpp b/src/cpp/proxy/engine.cpp index 20335abe..df197546 100644 --- a/src/cpp/proxy/engine.cpp +++ b/src/cpp/proxy/engine.cpp @@ -60,6 +60,7 @@ struct RequestSessionConnections { Connection inspectedConnection; Connection inspectErrorConnection; + Connection finishedConnection; Connection finishedByAcceptConnection; }; @@ -600,10 +601,10 @@ class Engine::Private : public QObject rs->setAutoShare(autoShare); // TODO: use callbacks for performance - connect(rs, &RequestSession::finished, this, &Private::rs_finished); reqSessionConnectionMap[rs] = { rs->inspected.connect(boost::bind(&Private::rs_inspected, this, boost::placeholders::_1, rs)), rs->inspectError.connect(boost::bind(&Private::rs_inspectError, this, rs)), + rs->finished.connect(boost::bind(&Private::rs_finished, this, rs)), rs->finishedByAccept.connect(boost::bind(&Private::rs_finishedByAccept, this, rs)) }; @@ -748,11 +749,8 @@ class Engine::Private : public QObject doProxy(rs, &idata); } -private slots: - void rs_finished() + void rs_finished(RequestSession *rs) { - RequestSession *rs = (RequestSession *)sender(); - if(!rs->isSockJs()) logFinished(rs); @@ -763,7 +761,6 @@ private slots: tryTakeNext(); } -private: void rs_finishedByAccept(RequestSession *rs) { logFinished(rs, true); diff --git a/src/cpp/proxy/proxysession.cpp b/src/cpp/proxy/proxysession.cpp index b378f9a5..f0c3b796 100644 --- a/src/cpp/proxy/proxysession.cpp +++ b/src/cpp/proxy/proxysession.cpp @@ -60,6 +60,7 @@ using std::map; struct RequestSessionConnections { Connection bytesWrittenConnection; Connection errorRespondingConnection; + Connection finishedConnection; Connection pausedConnection; Connection headerBytesSentConnection; Connection bodyBytesSentConnection; @@ -249,10 +250,10 @@ class ProxySession::Private : public QObject sessionItems += si; sessionItemsBySession.insert(rs, si); - connect(rs, &RequestSession::finished, this, &Private::rs_finished); reqSessionConnectionMap[rs] = { rs->bytesWritten.connect(boost::bind(&Private::rs_bytesWritten, this, boost::placeholders::_1, rs)), rs->errorResponding.connect(boost::bind(&Private::rs_errorResponding, this, rs)), + rs->finished.connect(boost::bind(&Private::rs_finished, this, rs)), rs->paused.connect(boost::bind(&Private::rs_paused, this, rs)), rs->headerBytesSent.connect(boost::bind(&Private::rs_headerBytesSent, this, boost::placeholders::_1, rs)), rs->bodyBytesSent.connect(boost::bind(&Private::rs_bodyBytesSent, this, boost::placeholders::_1, rs)) @@ -1180,7 +1181,6 @@ class ProxySession::Private : public QObject } } -public slots: void rs_bytesWritten(int count, RequestSession *rs) { log_debug("proxysession: %p response bytes written id=%s: %d", q, rs->rid().second.data(), count); @@ -1198,10 +1198,8 @@ public slots: tryResponseRead(); } - void rs_finished() + void rs_finished(RequestSession *rs) { - RequestSession *rs = (RequestSession *)sender(); - log_debug("proxysession: %p response finished id=%s", q, rs->rid().second.data()); SessionItem *si = sessionItemsBySession.value(rs); @@ -1220,6 +1218,7 @@ public slots: sessionItemsBySession.remove(rs); sessionItems.remove(si); + reqSessionConnectionMap.erase(rs); delete rs; delete si; @@ -1376,7 +1375,6 @@ public slots: incCounter(Stats::ClientContentBytesSent, count); } -public: void acceptRequest_finished() { if(acceptRequest->success()) @@ -1407,6 +1405,7 @@ public slots: foreach(RequestSession *rs, toDestroy) { q->requestSessionDestroyed(rs, true); + reqSessionConnectionMap.erase(rs); delete rs; if(!self) return; diff --git a/src/cpp/proxy/requestsession.cpp b/src/cpp/proxy/requestsession.cpp index c31bb89b..c786ed0a 100644 --- a/src/cpp/proxy/requestsession.cpp +++ b/src/cpp/proxy/requestsession.cpp @@ -300,7 +300,7 @@ class RequestSession::Private : public QObject isSockJs = true; sockJsManager->giveRequest(zhttpRequest, route.sockJsPath.length(), route.sockJsAsPath, route); zhttpRequest = 0; - QMetaObject::invokeMethod(q, "finished", Qt::QueuedConnection); + QMetaObject::invokeMethod(q, "doFinished", Qt::QueuedConnection); return; } } @@ -817,7 +817,7 @@ class RequestSession::Private : public QObject if(zhttpRequest->isFinished()) { cleanup(); - emit q->finished(); + q->finished(); } } @@ -867,7 +867,7 @@ class RequestSession::Private : public QObject { log_debug("requestsession: request error id=%s", rid.second.data()); cleanup(); - emit q->finished(); + q->finished(); } void inspectRequest_finished() @@ -962,6 +962,10 @@ class RequestSession::Private : public QObject } public slots: + void doFinished(){ + q->finished(); + } + void doResponseUpdate() { pendingResponseUpdate = false; diff --git a/src/cpp/proxy/requestsession.h b/src/cpp/proxy/requestsession.h index 3e6cfa81..c21ee1dc 100644 --- a/src/cpp/proxy/requestsession.h +++ b/src/cpp/proxy/requestsession.h @@ -105,6 +105,7 @@ class RequestSession : public QObject Signal inspectError; boost::signals2::signal inspected; + Signal finished; Signal finishedByAccept; SignalInt bytesWritten; Signal paused; @@ -116,9 +117,6 @@ class RequestSession : public QObject // should still wait for finished() Signal errorResponding; -signals: - void finished(); - private: class Private; friend class Private;