1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-03-27 04:10:24 +00:00

Merge branch 'fix_memory_leak' into 'master'

Fix memory leak on cell loading

See merge request OpenMW/openmw!2318
This commit is contained in:
psi29a 2022-08-21 20:07:23 +00:00
commit 857dca058b
3 changed files with 12 additions and 8 deletions

View file

@ -7,6 +7,7 @@
#include <components/esm3/inventorystate.hpp> #include <components/esm3/inventorystate.hpp>
#include <components/misc/strings/algorithm.hpp> #include <components/misc/strings/algorithm.hpp>
#include <components/misc/strings/lower.hpp> #include <components/misc/strings/lower.hpp>
#include <components/sceneutil/positionattitudetransform.hpp>
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp" #include "../mwbase/world.hpp"

View file

@ -1,6 +1,7 @@
#include "refdata.hpp" #include "refdata.hpp"
#include <components/esm3/objectstate.hpp> #include <components/esm3/objectstate.hpp>
#include <components/sceneutil/positionattitudetransform.hpp>
#include "customdata.hpp" #include "customdata.hpp"
#include "cellstore.hpp" #include "cellstore.hpp"
@ -140,12 +141,12 @@ namespace MWWorld
{} {}
} }
RefData::RefData(RefData&& other) noexcept = default; RefData::RefData(RefData&& other) = default;
RefData& RefData::operator=(RefData&& other) noexcept = default; RefData& RefData::operator=(RefData&& other) = default;
void RefData::setBaseNode(SceneUtil::PositionAttitudeTransform *base) void RefData::setBaseNode(osg::ref_ptr<SceneUtil::PositionAttitudeTransform> base)
{ {
mBaseNode = base; mBaseNode = std::move(base);
} }
SceneUtil::PositionAttitudeTransform* RefData::getBaseNode() SceneUtil::PositionAttitudeTransform* RefData::getBaseNode()

View file

@ -7,6 +7,8 @@
#include "../mwscript/locals.hpp" #include "../mwscript/locals.hpp"
#include "../mwworld/customdata.hpp" #include "../mwworld/customdata.hpp"
#include <osg/ref_ptr>
#include <string> #include <string>
#include <memory> #include <memory>
@ -34,7 +36,7 @@ namespace MWWorld
class RefData class RefData
{ {
SceneUtil::PositionAttitudeTransform* mBaseNode; osg::ref_ptr<SceneUtil::PositionAttitudeTransform> mBaseNode;
MWScript::Locals mLocals; MWScript::Locals mLocals;
std::shared_ptr<MWLua::LocalScripts> mLuaScripts; std::shared_ptr<MWLua::LocalScripts> mLuaScripts;
@ -78,7 +80,7 @@ namespace MWWorld
/// perform these operations). /// perform these operations).
RefData (const RefData& refData); RefData (const RefData& refData);
RefData (RefData&& other) noexcept; RefData (RefData&& other);
~RefData(); ~RefData();
@ -87,7 +89,7 @@ namespace MWWorld
/// perform this operations). /// perform this operations).
RefData& operator= (const RefData& refData); RefData& operator= (const RefData& refData);
RefData& operator= (RefData&& other) noexcept; RefData& operator= (RefData&& other);
/// Return base node (can be a null pointer). /// Return base node (can be a null pointer).
SceneUtil::PositionAttitudeTransform* getBaseNode(); SceneUtil::PositionAttitudeTransform* getBaseNode();
@ -96,7 +98,7 @@ namespace MWWorld
const SceneUtil::PositionAttitudeTransform* getBaseNode() const; const SceneUtil::PositionAttitudeTransform* getBaseNode() const;
/// Set base node (can be a null pointer). /// Set base node (can be a null pointer).
void setBaseNode (SceneUtil::PositionAttitudeTransform* base); void setBaseNode(osg::ref_ptr<SceneUtil::PositionAttitudeTransform> base);
int getCount(bool absolute = true) const; int getCount(bool absolute = true) const;