forked from vitalif/vitastor
Fix reenterability around set_timer
parent
88402e6eb6
commit
a3fb1d4c98
|
@ -163,6 +163,17 @@ void http_co_t::send_request(const std::string & host, const std::string & reque
|
||||||
this->sent = 0;
|
this->sent = 0;
|
||||||
this->response_callback = response_callback;
|
this->response_callback = response_callback;
|
||||||
this->parsed = {};
|
this->parsed = {};
|
||||||
|
if (state == HTTP_CO_KEEPALIVE)
|
||||||
|
{
|
||||||
|
state = HTTP_CO_SENDING_REQUEST;
|
||||||
|
submit_send();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start_connection();
|
||||||
|
}
|
||||||
|
// Do it _after_ state assignment because set_timer() can actually trigger
|
||||||
|
// other timers and requests (reenterability is our friend)
|
||||||
if (request_timeout > 0)
|
if (request_timeout > 0)
|
||||||
{
|
{
|
||||||
timeout_id = tfd->set_timer(request_timeout, false, [this](int timer_id)
|
timeout_id = tfd->set_timer(request_timeout, false, [this](int timer_id)
|
||||||
|
@ -183,15 +194,6 @@ void http_co_t::send_request(const std::string & host, const std::string & reque
|
||||||
stackout();
|
stackout();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (state == HTTP_CO_KEEPALIVE)
|
|
||||||
{
|
|
||||||
state = HTTP_CO_SENDING_REQUEST;
|
|
||||||
submit_send();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
start_connection();
|
|
||||||
}
|
|
||||||
stackout();
|
stackout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue