mirror of
https://gitee.com/an-tao/drogon.git
synced 2024-11-29 18:27:43 +08:00
Minor enhancement: move some smart pointers around instead of copying them (#1954)
This commit is contained in:
parent
da7f065a6f
commit
88d06684f2
@ -6,6 +6,6 @@ void JsonCtrl::asyncHandleHttpRequest(
|
||||
{
|
||||
Json::Value ret;
|
||||
ret["message"] = "Hello, World!";
|
||||
auto resp = HttpResponse::newHttpJsonResponse(ret);
|
||||
auto resp = HttpResponse::newHttpJsonResponse(std::move(ret));
|
||||
callback(resp);
|
||||
}
|
||||
|
@ -99,31 +99,32 @@ bool HttpRequestParser::processRequestLine(const char *begin, const char *end)
|
||||
|
||||
HttpRequestImplPtr HttpRequestParser::makeRequestForPool(HttpRequestImpl *ptr)
|
||||
{
|
||||
std::weak_ptr<HttpRequestParser> weakPtr = shared_from_this();
|
||||
return std::shared_ptr<HttpRequestImpl>(ptr, [weakPtr](HttpRequestImpl *p) {
|
||||
auto thisPtr = weakPtr.lock();
|
||||
if (thisPtr)
|
||||
{
|
||||
if (thisPtr->loop_->isInLoopThread())
|
||||
return std::shared_ptr<HttpRequestImpl>(
|
||||
ptr, [weakPtr = weak_from_this()](HttpRequestImpl *p) {
|
||||
auto thisPtr = weakPtr.lock();
|
||||
if (thisPtr)
|
||||
{
|
||||
p->reset();
|
||||
thisPtr->requestsPool_.emplace_back(
|
||||
thisPtr->makeRequestForPool(p));
|
||||
}
|
||||
else
|
||||
{
|
||||
thisPtr->loop_->queueInLoop([thisPtr, p]() {
|
||||
if (thisPtr->loop_->isInLoopThread())
|
||||
{
|
||||
p->reset();
|
||||
thisPtr->requestsPool_.emplace_back(
|
||||
thisPtr->makeRequestForPool(p));
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
auto &loop = thisPtr->loop_;
|
||||
loop->queueInLoop([thisPtr = std::move(thisPtr), p]() {
|
||||
p->reset();
|
||||
thisPtr->requestsPool_.emplace_back(
|
||||
thisPtr->makeRequestForPool(p));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
delete p;
|
||||
}
|
||||
});
|
||||
else
|
||||
{
|
||||
delete p;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void HttpRequestParser::reset()
|
||||
|
@ -546,11 +546,12 @@ void HttpServer::httpRequestHandling(
|
||||
}
|
||||
}
|
||||
|
||||
binderPtr->handleRequest(
|
||||
auto &binderRef = *binderPtr;
|
||||
binderRef.handleRequest(
|
||||
req,
|
||||
// This is the actual callback being passed to controller
|
||||
[req, binderPtr, callback = std::move(callback)](
|
||||
const HttpResponsePtr &resp) {
|
||||
[req, binderPtr = std::move(binderPtr), callback = std::move(callback)](
|
||||
const HttpResponsePtr &resp) mutable {
|
||||
// Check if we need to cache the response
|
||||
if (resp->expiredTime() >= 0 && resp->statusCode() != k404NotFound)
|
||||
{
|
||||
@ -562,9 +563,10 @@ void HttpServer::httpRequestHandling(
|
||||
}
|
||||
else
|
||||
{
|
||||
loop->queueInLoop([binderPtr, resp]() {
|
||||
binderPtr->responseCache_.setThreadData(resp);
|
||||
});
|
||||
loop->queueInLoop(
|
||||
[binderPtr = std::move(binderPtr), resp]() {
|
||||
binderPtr->responseCache_.setThreadData(resp);
|
||||
});
|
||||
}
|
||||
}
|
||||
// post-handling aop
|
||||
|
Loading…
Reference in New Issue
Block a user