summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorMnikolenko Productengine <mnikolenko@productengine.com>2017-07-11 14:54:29 +0300
committerMnikolenko Productengine <mnikolenko@productengine.com>2017-07-11 14:54:29 +0300
commit5478f2a223b5b679fe4515aa5a88f9ae1ed36985 (patch)
tree1b42c557249b90982eee5da45066d13abac5b252 /indra/newview
parent2c77a197be1b1c5c19008f9cd5ea7508a61d1bfe (diff)
MAINT-7581 [contribution] Closing the 'Replace links' floater crashes the viewer if a replace is in progress
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloaterlinkreplace.cpp22
-rw-r--r--indra/newview/llfloaterlinkreplace.h11
2 files changed, 12 insertions, 21 deletions
diff --git a/indra/newview/llfloaterlinkreplace.cpp b/indra/newview/llfloaterlinkreplace.cpp
index 3f80d6f1a4..10cce3bd22 100644
--- a/indra/newview/llfloaterlinkreplace.cpp
+++ b/indra/newview/llfloaterlinkreplace.cpp
@@ -41,16 +41,13 @@ LLFloaterLinkReplace::LLFloaterLinkReplace(const LLSD& key)
mRemainingItems(0),
mSourceUUID(LLUUID::null),
mTargetUUID(LLUUID::null),
- mInstance(NULL),
mBatchSize(gSavedSettings.getU32("LinkReplaceBatchSize"))
{
mEventTimer.stop();
- mInstance = this;
}
LLFloaterLinkReplace::~LLFloaterLinkReplace()
{
- mInstance = NULL;
}
BOOL LLFloaterLinkReplace::postBuild()
@@ -180,11 +177,9 @@ void LLFloaterLinkReplace::onStartClicked()
}
}
-void LLFloaterLinkReplace::linkCreatedCallback(const LLUUID& old_item_id,
- const LLUUID& target_item_id,
- bool needs_wearable_ordering_update,
- bool needs_description_update,
- const LLUUID& outfit_folder_id)
+// static
+void LLFloaterLinkReplace::linkCreatedCallback(LLHandle<LLFloaterLinkReplace> floater_handle, const LLUUID& old_item_id, const LLUUID& target_item_id,
+ bool needs_wearable_ordering_update, bool needs_description_update, const LLUUID& outfit_folder_id)
{
LL_DEBUGS() << "Inventory link replace:" << LL_NEWLINE
<< " - old_item_id = " << old_item_id.asString() << LL_NEWLINE
@@ -239,20 +234,21 @@ void LLFloaterLinkReplace::linkCreatedCallback(const LLUUID& old_item_id,
outfit_update_folder = outfit_folder_id;
}
- LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::itemRemovedCallback, this, outfit_update_folder));
+ LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::itemRemovedCallback, floater_handle, outfit_update_folder));
remove_inventory_object(old_item_id, cb);
}
-void LLFloaterLinkReplace::itemRemovedCallback(const LLUUID& outfit_folder_id)
+// static
+void LLFloaterLinkReplace::itemRemovedCallback(LLHandle<LLFloaterLinkReplace> floater_handle, const LLUUID& outfit_folder_id)
{
if (outfit_folder_id.notNull())
{
LLAppearanceMgr::getInstance()->updateClothingOrderingInfo(outfit_folder_id);
}
- if (mInstance)
+ if (!floater_handle.isDead())
{
- decreaseOpenItemCount();
+ floater_handle.get()->decreaseOpenItemCount();
}
}
@@ -324,7 +320,7 @@ void LLFloaterLinkReplace::processBatch(LLInventoryModel::item_array_t items)
LLInventoryObject::const_object_list_t obj_array;
obj_array.push_back(LLConstPointer<LLInventoryObject>(target_item));
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::linkCreatedCallback,
- this,
+ getDerivedHandle<LLFloaterLinkReplace>(),
source_item->getUUID(),
target_item->getUUID(),
needs_wearable_ordering_update,
diff --git a/indra/newview/llfloaterlinkreplace.h b/indra/newview/llfloaterlinkreplace.h
index 377dd1d450..dd5c301206 100644
--- a/indra/newview/llfloaterlinkreplace.h
+++ b/indra/newview/llfloaterlinkreplace.h
@@ -98,12 +98,9 @@ private:
void updateFoundLinks();
void processBatch(LLInventoryModel::item_array_t items);
- void linkCreatedCallback(const LLUUID& old_item_id,
- const LLUUID& target_item_id,
- bool needs_wearable_ordering_update,
- bool needs_description_update,
- const LLUUID& outfit_folder_id);
- void itemRemovedCallback(const LLUUID& outfit_folder_id);
+ static void linkCreatedCallback(LLHandle<LLFloaterLinkReplace> floater_handle, const LLUUID& old_item_id, const LLUUID& target_item_id,
+ bool needs_wearable_ordering_update, bool needs_description_update, const LLUUID& outfit_folder_id);
+ static void itemRemovedCallback(LLHandle<LLFloaterLinkReplace> floater_handle, const LLUUID& outfit_folder_id);
void onSourceItemDrop(const LLUUID& source_item_id);
void onTargetItemDrop(const LLUUID& target_item_id);
@@ -120,8 +117,6 @@ private:
U32 mBatchSize;
LLInventoryModel::item_array_t mRemainingInventoryItems;
-
- LLFloaterLinkReplace* mInstance;
};
#endif // LL_FLOATERLINKREPLACE_H