Emagi 1 yıl önce
ebeveyn
işleme
6351a004f9
1 değiştirilmiş dosya ile 7 ekleme ve 11 silme
  1. 7 11
      EQ2/source/WorldServer/zoneserver.cpp

+ 7 - 11
EQ2/source/WorldServer/zoneserver.cpp

@@ -7032,7 +7032,7 @@ vector<int32> ZoneServer::GetAttackableSpawnsByDistance(Spawn* caster, float dis
     std::shared_lock lock(MGridMaps);
 	std::map<int32, GridMap*>::iterator grids = grid_maps.find(caster->GetLocation());
 	if(grids != grid_maps.end()) {
-		grids->second->MSpawns.lock();
+		grids->second->MSpawns.lock_shared();
 		typedef map <int32, Spawn*> SpawnMapType;
 		for( SpawnMapType::iterator it = grids->second->spawns.begin(); it != grids->second->spawns.end(); ++it ) {
 			Spawn* spawn = it->second;
@@ -7041,7 +7041,7 @@ vector<int32> ZoneServer::GetAttackableSpawnsByDistance(Spawn* caster, float dis
 				ret.push_back(spawn->GetID());
 			}
 		}
-		grids->second->MSpawns.unlock();
+		grids->second->MSpawns.unlock_shared();
 	}
 	
 	return ret;
@@ -8516,7 +8516,7 @@ void ZoneServer::AddSpawnToGrid(Spawn* spawn, int32 grid_id) {
 	if(spawn->GetID() == 0 || spawn->IsDeletedSpawn())
 		return;
 	
-    MGridMaps.lock_shared();
+    MGridMaps.lock();
 	std::map<int32, GridMap*>::iterator grids = grid_maps.find(grid_id);
 	if(grids != grid_maps.end()) {
 		grids->second->MSpawns.lock();
@@ -8524,21 +8524,17 @@ void ZoneServer::AddSpawnToGrid(Spawn* spawn, int32 grid_id) {
 		grids->second->MSpawns.unlock();
 	}
 	else {
-		MGridMaps.unlock_shared();
 		GridMap* gm = new GridMap;
 		gm->grid_id = grid_id;
 		gm->spawns.insert(make_pair(spawn->GetID(), spawn));
-		MGridMaps.lock();
 		grid_maps.insert(make_pair(grid_id, gm));
-		MGridMaps.unlock();
-		return;
 	}
 	
-	MGridMaps.unlock_shared();
+	MGridMaps.unlock();
 }
 
 void ZoneServer::RemoveSpawnFromGrid(Spawn* spawn, int32 grid_id) {
-    std::shared_lock lock(MGridMaps);
+    std::unique_lock lock(MGridMaps);
 	std::map<int32, GridMap*>::iterator grids = grid_maps.find(grid_id);
 	if(grids != grid_maps.end()) {
 		grids->second->MSpawns.lock();
@@ -8568,12 +8564,12 @@ std::vector<Spawn*>* ZoneServer::GetSpawnsInGrid(int32 grid_id) {
     std::shared_lock lock(MGridMaps);
 	std::map<int32, GridMap*>::iterator grids = grid_maps.find(grid_id);
 	if(grids != grid_maps.end()) {
-		grids->second->MSpawns.lock();
+		grids->second->MSpawns.lock_shared();
 		typedef map <int32, Spawn*> SpawnMapType;
 		for( SpawnMapType::iterator it = grids->second->spawns.begin(); it != grids->second->spawns.end(); ++it ) {
 			ret->push_back( it->second );
 		}
-		grids->second->MSpawns.unlock();
+		grids->second->MSpawns.unlock_shared();
 	}
 	
 	return ret;