From a464b41d99f2898e2a34cc8cb5f7975f11c15d07 Mon Sep 17 00:00:00 2001 From: Desour Date: Mon, 23 Oct 2023 00:31:10 +0200 Subject: [PATCH] Inventory: Release resizes-locked lists on all `on_`-callbacks --- src/inventorymanager.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 458deff26e26..9f86d6926fee 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -592,16 +592,21 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame Report move to endpoints */ list_to.reset(); + list_from.reset(); // Source = destination => move if (from_inv == to_inv) { onMove(count, player); if (did_swap) { // Item is now placed in source list - src_item = list_from->getItem(from_i); - swapDirections(); - onMove(src_item.count, player); - swapDirections(); + list_from = get_borrow_checked_invlist(inv_from, from_list); + if (list_from) { + src_item = list_from->getItem(from_i); + list_from.reset(); + swapDirections(); + onMove(src_item.count, player); + swapDirections(); + } } mgr->setInventoryModified(from_inv); } else { @@ -616,10 +621,14 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame src_item.count = src_item_count; if (did_swap) { // Item is now placed in source list - src_item = list_from->getItem(from_i); - swapDirections(); - onPutAndOnTake(src_item, player); - swapDirections(); + list_from = get_borrow_checked_invlist(inv_from, from_list); + if (list_from) { + src_item = list_from->getItem(from_i); + list_from.reset(); + swapDirections(); + onPutAndOnTake(src_item, player); + swapDirections(); + } } mgr->setInventoryModified(to_inv); mgr->setInventoryModified(from_inv);