Make G() safe.
GitOrigin-RevId: d417008f94ce6f8c587561af352d696ef55895b3
This commit is contained in:
parent
84dba6cd8e
commit
116f0028a2
@ -122,6 +122,9 @@ class MultiTd : public Actor {
|
|||||||
public:
|
public:
|
||||||
explicit TdActorContext(std::string tag) : tag_(std::move(tag)) {
|
explicit TdActorContext(std::string tag) : tag_(std::move(tag)) {
|
||||||
}
|
}
|
||||||
|
int32 get_id() const override {
|
||||||
|
return 0x172ae58d;
|
||||||
|
}
|
||||||
std::string tag_;
|
std::string tag_;
|
||||||
};
|
};
|
||||||
auto context = std::make_shared<TdActorContext>(to_string(td_id));
|
auto context = std::make_shared<TdActorContext>(to_string(td_id));
|
||||||
|
@ -68,6 +68,11 @@ class Global : public ActorContext {
|
|||||||
Global(Global &&other) = delete;
|
Global(Global &&other) = delete;
|
||||||
Global &operator=(Global &&other) = delete;
|
Global &operator=(Global &&other) = delete;
|
||||||
|
|
||||||
|
static constexpr int32 ID = -572104940;
|
||||||
|
int32 get_id() const override {
|
||||||
|
return ID;
|
||||||
|
}
|
||||||
|
|
||||||
#define td_db() get_td_db_impl(__FILE__, __LINE__)
|
#define td_db() get_td_db_impl(__FILE__, __LINE__)
|
||||||
TdDb *get_td_db_impl(const char *file, int line) {
|
TdDb *get_td_db_impl(const char *file, int line) {
|
||||||
LOG_CHECK(td_db_) << close_flag() << " " << file << " " << line;
|
LOG_CHECK(td_db_) << close_flag() << " " << file << " " << line;
|
||||||
@ -410,8 +415,10 @@ class Global : public ActorContext {
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline Global *G() {
|
inline Global *G() {
|
||||||
CHECK(Scheduler::context());
|
ActorContext *context = Scheduler::context();
|
||||||
return static_cast<Global *>(Scheduler::context());
|
CHECK(context);
|
||||||
|
CHECK(context->get_id() == Global::ID);
|
||||||
|
return static_cast<Global *>(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -32,6 +32,11 @@ class ActorContext {
|
|||||||
ActorContext(ActorContext &&) = delete;
|
ActorContext(ActorContext &&) = delete;
|
||||||
ActorContext &operator=(ActorContext &&) = delete;
|
ActorContext &operator=(ActorContext &&) = delete;
|
||||||
virtual ~ActorContext() = default;
|
virtual ~ActorContext() = default;
|
||||||
|
|
||||||
|
virtual int32 get_id() const {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const char *tag_ = nullptr;
|
const char *tag_ = nullptr;
|
||||||
std::weak_ptr<ActorContext> this_ptr_;
|
std::weak_ptr<ActorContext> this_ptr_;
|
||||||
};
|
};
|
||||||
|
@ -468,6 +468,10 @@ TEST(Actors, do_after_stop) {
|
|||||||
|
|
||||||
class XContext : public ActorContext {
|
class XContext : public ActorContext {
|
||||||
public:
|
public:
|
||||||
|
int32 get_id() const override {
|
||||||
|
return 123456789;
|
||||||
|
}
|
||||||
|
|
||||||
void validate() {
|
void validate() {
|
||||||
CHECK(x == 1234);
|
CHECK(x == 1234);
|
||||||
}
|
}
|
||||||
@ -476,6 +480,7 @@ class XContext : public ActorContext {
|
|||||||
}
|
}
|
||||||
int x = 1234;
|
int x = 1234;
|
||||||
};
|
};
|
||||||
|
|
||||||
class WithContext : public Actor {
|
class WithContext : public Actor {
|
||||||
public:
|
public:
|
||||||
void start_up() override {
|
void start_up() override {
|
||||||
|
Reference in New Issue
Block a user