diff --git a/server/gameserver/GGListener.cc b/server/gameserver/GGListener.cc index af97fc3f..cf245511 100644 --- a/server/gameserver/GGListener.cc +++ b/server/gameserver/GGListener.cc @@ -138,9 +138,16 @@ void GGListener::Init() int gg_socket = args.Get(0); auto itr = disconnect_listener_hash_.find(gg_socket); if (itr != disconnect_listener_hash_.end()) { - class SocketDisconnectHandler *handle = nullptr, *tmp = nullptr; - list_for_each_entry_safe(handle, tmp, &itr->second, entry) { - handle->cb(a8::Args({})); + std::vector> del_handlers; + { + SocketDisconnectHandler *handle = nullptr, *tmp = nullptr; + list_for_each_entry_safe(handle, tmp, &itr->second, entry) { + del_handlers.push_back(handle->holder); + handle->cb(a8::Args({})); + } + } + for (auto handler : del_handlers) { + RemoveSocketDisconnectHandler(handler); } } });