Core/Misc: Make VMapManager2::acquireModelInstance and releaseModelInstance thread safe
Closes #4086
This commit is contained in:
@@ -247,6 +247,9 @@ namespace VMAP
|
|||||||
|
|
||||||
WorldModel* VMapManager2::acquireModelInstance(const std::string& basepath, const std::string& filename)
|
WorldModel* VMapManager2::acquireModelInstance(const std::string& basepath, const std::string& filename)
|
||||||
{
|
{
|
||||||
|
//! Critical section, thread safe access to iLoadedModelFiles
|
||||||
|
TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
|
||||||
|
|
||||||
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
|
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
|
||||||
if (model == iLoadedModelFiles.end())
|
if (model == iLoadedModelFiles.end())
|
||||||
{
|
{
|
||||||
@@ -267,6 +270,9 @@ namespace VMAP
|
|||||||
|
|
||||||
void VMapManager2::releaseModelInstance(const std::string &filename)
|
void VMapManager2::releaseModelInstance(const std::string &filename)
|
||||||
{
|
{
|
||||||
|
//! Critical section, thread safe access to iLoadedModelFiles
|
||||||
|
TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
|
||||||
|
|
||||||
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
|
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
|
||||||
if (model == iLoadedModelFiles.end())
|
if (model == iLoadedModelFiles.end())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "IVMapManager.h"
|
#include "IVMapManager.h"
|
||||||
#include "Dynamic/UnorderedMap.h"
|
#include "Dynamic/UnorderedMap.h"
|
||||||
#include "Define.h"
|
#include "Define.h"
|
||||||
|
#include <ace/Thread_Mutex.h>
|
||||||
|
|
||||||
//===========================================================
|
//===========================================================
|
||||||
|
|
||||||
@@ -71,6 +72,8 @@ namespace VMAP
|
|||||||
// Tree to check collision
|
// Tree to check collision
|
||||||
ModelFileMap iLoadedModelFiles;
|
ModelFileMap iLoadedModelFiles;
|
||||||
InstanceTreeMap iInstanceMapTrees;
|
InstanceTreeMap iInstanceMapTrees;
|
||||||
|
// Mutex for iLoadedModelFiles
|
||||||
|
ACE_Thread_Mutex LoadedModelFilesLock;
|
||||||
|
|
||||||
bool _loadMap(uint32 mapId, const std::string& basePath, uint32 tileX, uint32 tileY);
|
bool _loadMap(uint32 mapId, const std::string& basePath, uint32 tileX, uint32 tileY);
|
||||||
/* void _unloadMap(uint32 pMapId, uint32 x, uint32 y); */
|
/* void _unloadMap(uint32 pMapId, uint32 x, uint32 y); */
|
||||||
|
|||||||
Reference in New Issue
Block a user