diff --git a/Core/GameEngine/Include/GameNetwork/GameInfo.h b/Core/GameEngine/Include/GameNetwork/GameInfo.h index 5483bbeba58..06a44239451 100644 --- a/Core/GameEngine/Include/GameNetwork/GameInfo.h +++ b/Core/GameEngine/Include/GameNetwork/GameInfo.h @@ -302,6 +302,7 @@ class SkirmishGameInfo : public GameInfo, public Snapshot for (Int i = 0; i< MAX_SLOTS; ++i) setSlotPointer(i, &m_skirmishSlot[i]); } + virtual ~SkirmishGameInfo() override {} }; extern SkirmishGameInfo *TheSkirmishGameInfo; diff --git a/Core/GameEngine/Include/GameNetwork/GameSpy/StagingRoomGameInfo.h b/Core/GameEngine/Include/GameNetwork/GameSpy/StagingRoomGameInfo.h index d17569bc807..5ed92588a8b 100644 --- a/Core/GameEngine/Include/GameNetwork/GameSpy/StagingRoomGameInfo.h +++ b/Core/GameEngine/Include/GameNetwork/GameSpy/StagingRoomGameInfo.h @@ -96,6 +96,7 @@ class GameSpyStagingRoom : public GameInfo public: GameSpyStagingRoom(); + virtual ~GameSpyStagingRoom() override {} virtual void reset() override; void cleanUpSlotPointers(); diff --git a/Core/GameEngine/Include/GameNetwork/LANGameInfo.h b/Core/GameEngine/Include/GameNetwork/LANGameInfo.h index 2d0cdbd202a..1296d47dcb4 100644 --- a/Core/GameEngine/Include/GameNetwork/LANGameInfo.h +++ b/Core/GameEngine/Include/GameNetwork/LANGameInfo.h @@ -79,6 +79,7 @@ class LANGameInfo : public GameInfo public: LANGameInfo(); + virtual ~LANGameInfo() override {} void setSlot( Int slotNum, LANGameSlot slotInfo ); ///< Set the slot state (human, open, AI, etc) LANGameSlot* getLANSlot( Int slotNum ); ///< Get the slot const LANGameSlot* getConstLANSlot( Int slotNum ) const; ///< Get the slot diff --git a/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp b/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp index f347db5a83f..6f08930bd3c 100644 --- a/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp +++ b/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp @@ -2509,6 +2509,8 @@ void ConnectionManager::sendDisconnectChat(UnicodeString text) { sendLocalCommandDirect(msg, 0xff ^ (1 << m_localSlot)); processDisconnectChat(msg); + + msg->detach(); } UnsignedShort ConnectionManager::sendFileAnnounce(AsciiString path, UnsignedByte playerMask) diff --git a/Core/GameEngine/Source/GameNetwork/FirewallHelper.cpp b/Core/GameEngine/Source/GameNetwork/FirewallHelper.cpp index 04e5f7166b0..0cb350227bc 100644 --- a/Core/GameEngine/Source/GameNetwork/FirewallHelper.cpp +++ b/Core/GameEngine/Source/GameNetwork/FirewallHelper.cpp @@ -1529,6 +1529,8 @@ Bool FirewallHelperClass::openSpareSocket(UnsignedShort port) { if (m_spareSockets[i].udp->Bind((UnsignedInt)0, port) != 0) { DEBUG_CRASH(("FirewallHelperClass::openSpareSocket - Failed to init spare socket")); + delete m_spareSockets[i].udp; + m_spareSockets[i].udp = nullptr; return FALSE; } diff --git a/Core/GameEngine/Source/GameNetwork/LANAPI.cpp b/Core/GameEngine/Source/GameNetwork/LANAPI.cpp index ef244dd8675..e5d5accb78f 100644 --- a/Core/GameEngine/Source/GameNetwork/LANAPI.cpp +++ b/Core/GameEngine/Source/GameNetwork/LANAPI.cpp @@ -693,6 +693,7 @@ void LANAPI::RequestGameLeave() // Exit out immediately if we're hosting OnPlayerLeave(m_name); removeGame(m_currentGame); + delete m_currentGame; m_currentGame = nullptr; m_inLobby = true; } diff --git a/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp b/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp index 701ef3e987e..5075b7cfba0 100644 --- a/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp +++ b/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp @@ -233,6 +233,7 @@ void LANAPI::OnGameStart() DEBUG_LOG(("After transfer, we didn't really have the map. Bailing...")); OnPlayerLeave(m_name); removeGame(m_currentGame); + delete m_currentGame; m_currentGame = nullptr; m_inLobby = TRUE; diff --git a/Core/GameEngine/Source/GameNetwork/LANAPIhandlers.cpp b/Core/GameEngine/Source/GameNetwork/LANAPIhandlers.cpp index 7f88b835f86..6aa2956df0d 100644 --- a/Core/GameEngine/Source/GameNetwork/LANAPIhandlers.cpp +++ b/Core/GameEngine/Source/GameNetwork/LANAPIhandlers.cpp @@ -567,6 +567,7 @@ void LANAPI::handleRequestLobbyLeave( LANMessage *msg, UnsignedInt senderIP ) if (player->getIP() == senderIP) { removePlayer(player); + delete player; OnPlayerList(m_lobbyPlayers); break; } diff --git a/Core/GameEngine/Source/GameNetwork/udp.cpp b/Core/GameEngine/Source/GameNetwork/udp.cpp index e5f30ccb795..e3ab907928b 100644 --- a/Core/GameEngine/Source/GameNetwork/udp.cpp +++ b/Core/GameEngine/Source/GameNetwork/udp.cpp @@ -174,6 +174,8 @@ Int UDP::Bind(UnsignedInt IP,UnsignedShort Port) { status=GetStatus(); //CERR("Bind failure (" << status << ") IP " << IP << " PORT " << Port ) + closesocket(fd); + fd=0; return(status); } diff --git a/Generals/Code/GameEngine/Include/Common/Recorder.h b/Generals/Code/GameEngine/Include/Common/Recorder.h index bd7b030e146..110e58bbc3f 100644 --- a/Generals/Code/GameEngine/Include/Common/Recorder.h +++ b/Generals/Code/GameEngine/Include/Common/Recorder.h @@ -42,6 +42,7 @@ class ReplayGameInfo : public GameInfo for (Int i = 0; i< MAX_SLOTS; ++i) setSlotPointer(i, &m_ReplaySlot[i]); } + virtual ~ReplayGameInfo() override {} }; enum RecorderModeType CPP_11(: Int) { diff --git a/Generals/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h b/Generals/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h index 5d136972f72..9664361f0c4 100644 --- a/Generals/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h +++ b/Generals/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h @@ -67,6 +67,7 @@ class GameSpyGameInfo : public GameInfo public: GameSpyGameInfo(); + virtual ~GameSpyGameInfo() override {} inline void setServer(SBServer server) { m_server = server; } inline SBServer getServer() { return m_server; } diff --git a/GeneralsMD/Code/GameEngine/Include/Common/Recorder.h b/GeneralsMD/Code/GameEngine/Include/Common/Recorder.h index fba73ad5ec3..1a82d84adfc 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/Recorder.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/Recorder.h @@ -44,6 +44,7 @@ class ReplayGameInfo : public GameInfo for (Int i = 0; i< MAX_SLOTS; ++i) setSlotPointer(i, &m_ReplaySlot[i]); } + virtual ~ReplayGameInfo() override {} }; enum RecorderModeType CPP_11(: Int) { diff --git a/GeneralsMD/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h b/GeneralsMD/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h index a1acedac598..4b1e8ee7100 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h +++ b/GeneralsMD/Code/GameEngine/Include/GameNetwork/GameSpyGameInfo.h @@ -67,6 +67,7 @@ class GameSpyGameInfo : public GameInfo public: GameSpyGameInfo(); + virtual ~GameSpyGameInfo() override {} inline void setServer(SBServer server) { m_server = server; } inline SBServer getServer() { return m_server; }