diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 5c456048..4968a5b3 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -22,7 +22,7 @@ class EventHandler : public std::enable_shared_from_this { public: - a8::CommonCbProc cb; + std::shared_ptr cb; list_head entry; std::shared_ptr holder; @@ -497,7 +497,8 @@ std::weak_ptr Trigger::AddListener(int event_id, a8::CommonCbProc INIT_LIST_HEAD(&itr->second); } auto p = std::make_shared(); - p->cb = cb; + p->cb = std::make_shared(); + *p->cb = cb; list_add_tail(&p->entry, &itr->second); p->holder = p; return p; @@ -529,7 +530,8 @@ void Trigger::DispatchEvent(int event_id, const std::vector& param) if (itr != listeners_hash_.end()) { struct EventHandler *handle = nullptr, *tmp = nullptr; list_for_each_entry_safe(handle, tmp, &itr->second, entry) { - handle->cb(param); + auto cb = handle->cb; + (*cb)(param); } } }