diff --git a/Generals/Code/GameEngine/Source/Common/Recorder.cpp b/Generals/Code/GameEngine/Source/Common/Recorder.cpp index a3767096f21..943daad6cc6 100644 --- a/Generals/Code/GameEngine/Source/Common/Recorder.cpp +++ b/Generals/Code/GameEngine/Source/Common/Recorder.cpp @@ -372,6 +372,7 @@ RecorderClass::RecorderClass() m_archiveReplays = FALSE; m_nextFrame = 0; m_wasDesync = FALSE; + m_crcInfo = NULL; // init(); // just for the heck of it. @@ -381,6 +382,10 @@ RecorderClass::RecorderClass() * Destructor */ RecorderClass::~RecorderClass() { + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } } /** @@ -407,6 +412,11 @@ void RecorderClass::init() { m_doingAnalysis = FALSE; m_playbackFrameCount = 0; + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } + OptionPreferences optionPref; m_archiveReplays = optionPref.getArchiveReplaysEnabled(); } @@ -421,6 +431,11 @@ void RecorderClass::reset() { } m_fileName.clear(); + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } + init(); } @@ -478,6 +493,11 @@ void RecorderClass::stopPlayback() { } m_fileName.clear(); + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } + if (!m_doingAnalysis) { TheMessageStream->appendMessage(GameMessage::MSG_CLEAR_GAME_DATA); @@ -1058,11 +1078,18 @@ UnsignedInt CRCInfo::readCRC(void) Bool RecorderClass::sawCRCMismatch() const { + if (m_crcInfo == NULL) { + return FALSE; + } return m_crcInfo->sawCRCMismatch(); } void RecorderClass::handleCRCMessage(UnsignedInt newCRC, Int playerIndex, Bool fromPlayback) { + if (m_crcInfo == NULL) { + return; + } + if (fromPlayback) { //DEBUG_LOG(("RecorderClass::handleCRCMessage() - Adding CRC of %X from %d to m_crcInfo", newCRC, playerIndex)); diff --git a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp index cf12dca15c1..a55078e78b0 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp @@ -378,6 +378,7 @@ RecorderClass::RecorderClass() m_archiveReplays = FALSE; m_nextFrame = 0; m_wasDesync = FALSE; + m_crcInfo = NULL; // init(); // just for the heck of it. @@ -387,6 +388,10 @@ RecorderClass::RecorderClass() * Destructor */ RecorderClass::~RecorderClass() { + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } } /** @@ -413,6 +418,11 @@ void RecorderClass::init() { m_doingAnalysis = FALSE; m_playbackFrameCount = 0; + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } + OptionPreferences optionPref; m_archiveReplays = optionPref.getArchiveReplaysEnabled(); } @@ -427,6 +437,11 @@ void RecorderClass::reset() { } m_fileName.clear(); + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } + init(); } @@ -485,6 +500,11 @@ void RecorderClass::stopPlayback() { } m_fileName.clear(); + if (m_crcInfo != NULL) { + deleteInstance(m_crcInfo); + m_crcInfo = NULL; + } + if (!m_doingAnalysis) { TheGameLogic->exitGame(); @@ -1112,11 +1132,18 @@ UnsignedInt CRCInfo::readCRC(void) Bool RecorderClass::sawCRCMismatch() const { + if (m_crcInfo == NULL) { + return FALSE; + } return m_crcInfo->sawCRCMismatch(); } void RecorderClass::handleCRCMessage(UnsignedInt newCRC, Int playerIndex, Bool fromPlayback) { + if (m_crcInfo == NULL) { + return; + } + if (fromPlayback) { //DEBUG_LOG(("RecorderClass::handleCRCMessage() - Adding CRC of %X from %d to m_crcInfo", newCRC, playerIndex));