Ensure that RequestActor function isn't run while closing.

This commit is contained in:
levlam 2021-11-08 19:17:36 +03:00
parent 244986ae7d
commit 544ec92aa9

View File

@ -30,6 +30,10 @@ class RequestActor : public Actor {
} }
void loop() override { void loop() override {
if (G()->close_flag()) {
return do_send_error(Global::request_aborted_error());
}
PromiseActor<T> promise_actor; PromiseActor<T> promise_actor;
FutureActor<T> future; FutureActor<T> future;
init_promise_future(&promise_actor, &future); init_promise_future(&promise_actor, &future);
@ -65,9 +69,9 @@ class RequestActor : public Actor {
auto error = future_.move_as_error(); auto error = future_.move_as_error();
if (error == Status::Error<FutureActor<T>::HANGUP_ERROR_CODE>()) { if (error == Status::Error<FutureActor<T>::HANGUP_ERROR_CODE>()) {
// dropping query due to lost authorization or lost promise // dropping query due to lost authorization or lost promise
// Td may be already closed, so we should check is auth_manager_ is empty if (G()->close_flag()) {
bool is_authorized = td_->auth_manager_ && td_->auth_manager_->is_authorized(); do_send_error(Global::request_aborted_error());
if (is_authorized) { } else if (!td_->auth_manager_->is_authorized()) {
LOG(ERROR) << "Promise was lost"; LOG(ERROR) << "Promise was lost";
do_send_error(Status::Error(500, "Query can't be answered due to a bug in TDLib")); do_send_error(Status::Error(500, "Query can't be answered due to a bug in TDLib"));
} else { } else {