forked from teamnwah/openmw-tes3coop
[Client] Fix potential invalid pointer when storing cell unloads
Notably, builds of the client done with Clang were crashing on startup before this.
This commit is contained in:
parent
420dab10e1
commit
ce11a1dfa9
3 changed files with 14 additions and 3 deletions
|
@ -1544,7 +1544,7 @@ void LocalPlayer::clearCurrentContainer()
|
|||
currentContainer.mpNum = 0;
|
||||
}
|
||||
|
||||
void LocalPlayer::storeCellState(ESM::Cell cell, int stateType)
|
||||
void LocalPlayer::storeCellState(const ESM::Cell& cell, int stateType)
|
||||
{
|
||||
std::vector<CellState>::iterator iter;
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ namespace mwmp
|
|||
void clearCellStates();
|
||||
void clearCurrentContainer();
|
||||
|
||||
void storeCellState(ESM::Cell cell, int stateType);
|
||||
void storeCellState(const ESM::Cell& cell, int stateType);
|
||||
void storeCurrentContainer(const MWWorld::Ptr& container);
|
||||
|
||||
void playAnimation();
|
||||
|
|
|
@ -243,6 +243,17 @@ namespace MWWorld
|
|||
std::cout << "Unloading cell\n";
|
||||
ListAndResetObjectsVisitor visitor;
|
||||
|
||||
/*
|
||||
Start of tes3mp addition
|
||||
|
||||
Set a const pointer to the iterator's ESM::Cell here, because
|
||||
(*iter)->getCell() can become invalid later down
|
||||
*/
|
||||
const ESM::Cell* cell = (*iter)->getCell();
|
||||
/*
|
||||
End of tes3mp addition
|
||||
*/
|
||||
|
||||
(*iter)->forEach<ListAndResetObjectsVisitor>(visitor);
|
||||
for (std::vector<MWWorld::Ptr>::const_iterator iter2 (visitor.mObjects.begin());
|
||||
iter2!=visitor.mObjects.end(); ++iter2)
|
||||
|
@ -276,7 +287,7 @@ namespace MWWorld
|
|||
|
||||
Store a cell unload for the LocalPlayer
|
||||
*/
|
||||
mwmp::Main::get().getLocalPlayer()->storeCellState(*(*iter)->getCell(), mwmp::CellState::UNLOAD);
|
||||
mwmp::Main::get().getLocalPlayer()->storeCellState(*cell, mwmp::CellState::UNLOAD);
|
||||
/*
|
||||
End of tes3mp addition
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue