Browse Source

Some EquipmentItem locking fixes

Image 3 years ago
parent
commit
60f1130466
2 changed files with 12 additions and 5 deletions
  1. 11 4
      EQ2/source/WorldServer/Items/Items.cpp
  2. 1 1
      EQ2/source/WorldServer/Items/Items.h

+ 11 - 4
EQ2/source/WorldServer/Items/Items.cpp

@@ -3556,9 +3556,12 @@ bool EquipmentItemList::AddItem(int8 slot, Item* item){
 		Item* curItem = GetItem(slot);
 
 		if (curItem) // existing item in slot
+		{
+			MEquipmentItems.unlock();
 			return false;
+		}
 		
-		SetItem(slot, item);
+		SetItem(slot, item, true);
 		if (item->details.unique_id == 0) {
 			GetItem(slot)->details.unique_id = MasterItemList::NextUniqueID();
 			if (item->IsBag())
@@ -3581,13 +3584,17 @@ int8 EquipmentItemList::GetNumberOfItems(){
 	return ret;
 }
 
-void EquipmentItemList::SetItem(int8 slot_id, Item* item){
-	MEquipmentItems.lock();
+void EquipmentItemList::SetItem(int8 slot_id, Item* item, bool locked){
+	if(!locked)
+		MEquipmentItems.lock();
+		
 	item->details.inv_slot_id = 0;
 	item->details.slot_id = slot_id;
 	item->details.index = slot_id;
 	items[slot_id] = item;
-	MEquipmentItems.unlock();
+
+	if(!locked)
+		MEquipmentItems.unlock();
 }
 
 vector<Item*>* EquipmentItemList::GetAllEquippedItems(){

+ 1 - 1
EQ2/source/WorldServer/Items/Items.h

@@ -1031,7 +1031,7 @@ public:
 	int8	GetNumberOfItems();
 	Item*	GetItemFromUniqueID(int32 item_id);
 	Item*	GetItemFromItemID(int32 item_id);
-	void	SetItem(int8 slot_id, Item* item);
+	void	SetItem(int8 slot_id, Item* item, bool locked = false);
 	void	RemoveItem(int8 slot, bool delete_item = false);
 	Item*	GetItem(int8 slot_id);
 	bool	AddItem(int8 slot, Item* item);