diff --git a/Generals/Code/GameEngine/Source/Common/MessageStream.cpp b/Generals/Code/GameEngine/Source/Common/MessageStream.cpp index a4eea8cb1d2..43fc18f615b 100644 --- a/Generals/Code/GameEngine/Source/Common/MessageStream.cpp +++ b/Generals/Code/GameEngine/Source/Common/MessageStream.cpp @@ -54,7 +54,18 @@ CommandList *TheCommandList = NULL; */ GameMessage::GameMessage( GameMessage::Type type ) { - m_playerIndex = ThePlayerList->getLocalPlayer()->getPlayerIndex(); + // Defensive programming: Check if ThePlayerList is initialized before dereferencing + // This prevents crashes during early initialization or shutdown when Windows messages + // can arrive before the game state is fully ready + if (ThePlayerList != NULL && ThePlayerList->getLocalPlayer() != NULL) + { + m_playerIndex = ThePlayerList->getLocalPlayer()->getPlayerIndex(); + } + else + { + // Use neutral player index (0) as a safe default when ThePlayerList is not yet initialized + m_playerIndex = 0; + } m_type = type; m_argList = NULL; m_argTail = NULL; diff --git a/GeneralsMD/Code/GameEngine/Source/Common/MessageStream.cpp b/GeneralsMD/Code/GameEngine/Source/Common/MessageStream.cpp index 4f0fdf775f6..317f9e521a8 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/MessageStream.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/MessageStream.cpp @@ -54,7 +54,18 @@ CommandList* TheCommandList = NULL; */ GameMessage::GameMessage(GameMessage::Type type) { - m_playerIndex = ThePlayerList->getLocalPlayer()->getPlayerIndex(); + // Defensive programming: Check if ThePlayerList is initialized before dereferencing + // This prevents crashes during early initialization or shutdown when Windows messages + // can arrive before the game state is fully ready + if (ThePlayerList != NULL && ThePlayerList->getLocalPlayer() != NULL) + { + m_playerIndex = ThePlayerList->getLocalPlayer()->getPlayerIndex(); + } + else + { + // Use neutral player index (0) as a safe default when ThePlayerList is not yet initialized + m_playerIndex = 0; + } m_type = type; m_argList = NULL; m_argTail = NULL;