Browse Source

reverse previous excessive locks

Emagi 1 year ago
parent
commit
5de0b9b4b0
1 changed files with 7 additions and 3 deletions
  1. 7 3
      EQ2/source/WorldServer/zoneserver.cpp

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

@@ -8519,7 +8519,7 @@ void ZoneServer::AddSpawnToGrid(Spawn* spawn, int32 grid_id) {
 	if(spawn->GetID() == 0 || spawn->IsDeletedSpawn())
 		return;
 	
-    MGridMaps.lock();
+    MGridMaps.lock_shared();
 	std::map<int32, GridMap*>::iterator grids = grid_maps.find(grid_id);
 	if(grids != grid_maps.end()) {
 		grids->second->MSpawns.lock();
@@ -8527,17 +8527,21 @@ void ZoneServer::AddSpawnToGrid(Spawn* spawn, int32 grid_id) {
 		grids->second->MSpawns.unlock();
 	}
 	else {
+		MGridMaps.unlock_shared();
+		MGridMaps.lock();
 		GridMap* gm = new GridMap;
 		gm->grid_id = grid_id;
 		gm->spawns.insert(make_pair(spawn->GetID(), spawn));
 		grid_maps.insert(make_pair(grid_id, gm));
+		MGridMaps.unlock();
+		return;
 	}
 	
-	MGridMaps.unlock();
+	MGridMaps.unlock_shared();
 }
 
 void ZoneServer::RemoveSpawnFromGrid(Spawn* spawn, int32 grid_id) {
-    std::unique_lock lock(MGridMaps);
+    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();