Commit 3c915ef9 authored by knowledge4igor's avatar knowledge4igor

Fix client send request problem (connect and pop from queue order)

parent 981c3320
......@@ -90,6 +90,11 @@ struct Connection : public std::enable_shared_from_this<Connection> {
std::chrono::milliseconds timeout,
OnDone onDone);
Async::Promise<Response> asyncPerform(
const Http::Request& request,
std::chrono::milliseconds timeout,
OnDone onDone);
void performImpl(
const Http::Request& request,
std::chrono::milliseconds timeout,
......
......@@ -477,7 +477,16 @@ Connection::perform(
std::chrono::milliseconds timeout,
Connection::OnDone onDone) {
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(
RequestData(
std::move(resolve),
......@@ -485,9 +494,6 @@ Connection::perform(
request,
timeout,
std::move(onDone)));
} else {
performImpl(request, timeout, std::move(resolve), std::move(reject), std::move(onDone));
}
});
}
......@@ -796,7 +802,12 @@ Client::doRequest(
}
if (!conn->isConnected()) {
auto res = conn->asyncPerform(request, timeout, [=]() {
pool.releaseConnection(conn);
processRequestQueue();
});
conn->connect(helpers::httpAddr(s.first));
return res;
}
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