From 5eff2ece212e413ee5d609665ef4d5964412144d Mon Sep 17 00:00:00 2001 From: David Cernat Date: Sun, 29 Jan 2017 20:18:19 +0200 Subject: [PATCH] [Server] Fix memory leaks related to WorldEvents as suggested by Koncord --- apps/openmw-mp/Networking.cpp | 9 ++++++++- apps/openmw-mp/Script/Functions/World.cpp | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/openmw-mp/Networking.cpp b/apps/openmw-mp/Networking.cpp index f3e2aa9ca..20fb5ee95 100644 --- a/apps/openmw-mp/Networking.cpp +++ b/apps/openmw-mp/Networking.cpp @@ -21,7 +21,7 @@ using namespace std; Networking *Networking::sThis = 0; -static WorldEvent *worldEvent; +static WorldEvent *worldEvent = nullptr; Networking::Networking(RakNet::RakPeerInterface *peer) { @@ -417,6 +417,13 @@ void Networking::processWorldPacket(RakNet::Packet *packet) return; WorldPacket *myPacket = worldController->GetPacket(packet->data[0]); + + if (worldEvent) + { + delete worldEvent; + worldEvent = nullptr; + } + worldEvent = new WorldEvent(player->guid); mwmp::WorldObject worldObject; diff --git a/apps/openmw-mp/Script/Functions/World.cpp b/apps/openmw-mp/Script/Functions/World.cpp index 85fb1071f..b9d901777 100644 --- a/apps/openmw-mp/Script/Functions/World.cpp +++ b/apps/openmw-mp/Script/Functions/World.cpp @@ -9,7 +9,7 @@ using namespace mwmp; -static WorldEvent *worldEvent; +static WorldEvent *worldEvent = nullptr; std::regex exteriorCellPattern("^(-?\\d+), (-?\\d+)$"); @@ -18,6 +18,12 @@ void WorldFunctions::CreateWorldEvent(unsigned short pid) noexcept Player *player; GET_PLAYER(pid, player, ); + if (worldEvent) + { + delete worldEvent; + worldEvent = nullptr; + } + worldEvent = new WorldEvent(player->guid); }