Unverified Commit 5cf1bb19 authored by Dennis Jenkins's avatar Dennis Jenkins Committed by GitHub

Merge pull request #394 from knowledge4igor/fix_client_send_request_problem

Fix client send request problem (caused by connect and pop from queue order)
parents 981c3320 3c915ef9
...@@ -90,6 +90,11 @@ struct Connection : public std::enable_shared_from_this<Connection> { ...@@ -90,6 +90,11 @@ struct Connection : public std::enable_shared_from_this<Connection> {
std::chrono::milliseconds timeout, std::chrono::milliseconds timeout,
OnDone onDone); OnDone onDone);
Async::Promise<Response> asyncPerform(
const Http::Request& request,
std::chrono::milliseconds timeout,
OnDone onDone);
void performImpl( void performImpl(
const Http::Request& request, const Http::Request& request,
std::chrono::milliseconds timeout, std::chrono::milliseconds timeout,
......
...@@ -477,7 +477,16 @@ Connection::perform( ...@@ -477,7 +477,16 @@ Connection::perform(
std::chrono::milliseconds timeout, std::chrono::milliseconds timeout,
Connection::OnDone onDone) { Connection::OnDone onDone) {
return Async::Promise<Response>([=](Async::Resolver& resolve, Async::Rejection& reject) { return Async::Promise<Response>([=](Async::Resolver& resolve, Async::Rejection& reject) {
if (!isConnected()) { performImpl(request, timeout, std::move(resolve), std::move(reject), std::move(onDone));
});
}
Async::Promise<Response>
Connection::asyncPerform(
const Http::Request& request,
std::chrono::milliseconds timeout,
Connection::OnDone onDone) {
return Async::Promise<Response>([=](Async::Resolver& resolve, Async::Rejection& reject) {
requestsQueue.push( requestsQueue.push(
RequestData( RequestData(
std::move(resolve), std::move(resolve),
...@@ -485,9 +494,6 @@ Connection::perform( ...@@ -485,9 +494,6 @@ Connection::perform(
request, request,
timeout, timeout,
std::move(onDone))); std::move(onDone)));
} else {
performImpl(request, timeout, std::move(resolve), std::move(reject), std::move(onDone));
}
}); });
} }
...@@ -796,7 +802,12 @@ Client::doRequest( ...@@ -796,7 +802,12 @@ Client::doRequest(
} }
if (!conn->isConnected()) { if (!conn->isConnected()) {
auto res = conn->asyncPerform(request, timeout, [=]() {
pool.releaseConnection(conn);
processRequestQueue();
});
conn->connect(helpers::httpAddr(s.first)); conn->connect(helpers::httpAddr(s.first));
return res;
} }
return conn->perform(request, timeout, [=]() { return conn->perform(request, timeout, [=]() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment