diff --git a/server/gameserver/GGListener.cc b/server/gameserver/GGListener.cc index a599038f..5e774d41 100644 --- a/server/gameserver/GGListener.cc +++ b/server/gameserver/GGListener.cc @@ -249,5 +249,17 @@ void GGListener::RemoveSocketDisconnectHandler(std::weak_ptr> 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({itr->first})); + } + for (auto handler : del_handlers) { + RemoveSocketDisconnectHandler(handler); + } + } PlayerMgr::Instance()->OnClientDisconnect(socket_handle); }