Ensure that NetQueryCreator doesn't access Td from another thread.

This commit is contained in:
levlam 2023-07-26 12:29:36 +03:00
parent c920536260
commit 1ab81f426c
3 changed files with 6 additions and 3 deletions

View File

@ -142,7 +142,7 @@ class Global final : public ActorContext {
string get_option_string(Slice name, string default_value = "") const;
bool is_server_time_reliable() const {
return server_time_difference_was_updated_;
return server_time_difference_was_updated_.load(std::memory_order_relaxed);
}
double to_server_time(double now) const {
return now + get_server_time_difference();

View File

@ -11,6 +11,8 @@
#include "td/telegram/Td.h"
#include "td/telegram/telegram_api.h"
#include "td/actor/actor.h"
#include "td/utils/buffer.h"
#include "td/utils/format.h"
#include "td/utils/Gzip.h"
@ -20,7 +22,7 @@
namespace td {
NetQueryCreator::NetQueryCreator(std::shared_ptr<NetQueryStats> net_query_stats)
: net_query_stats_(std::move(net_query_stats)) {
: net_query_stats_(std::move(net_query_stats)), current_scheduler_id_(Scheduler::instance()->sched_id()) {
object_pool_.set_check_empty(true);
}
@ -42,7 +44,7 @@ NetQueryPtr NetQueryCreator::create(uint64 id, const telegram_api::Function &fun
int32 tl_constructor = function.get_id();
int32 total_timeout_limit = 60;
if (!G()->close_flag()) {
if (current_scheduler_id_ == Scheduler::instance()->sched_id() && !G()->close_flag()) {
auto td = G()->td();
if (!td.empty()) {
auto auth_manager = td.get_actor_unsafe()->auth_manager_.get();

View File

@ -43,6 +43,7 @@ class NetQueryCreator {
private:
std::shared_ptr<NetQueryStats> net_query_stats_;
ObjectPool<NetQuery> object_pool_;
int32 current_scheduler_id_ = 0;
};
} // namespace td