Skip to content

Commit ac8d8aa

Browse files
author
Rye Cogtail
committed
Fix leak of callback objects on shutdown in LLMaterialMgr
1 parent 8b78252 commit ac8d8aa

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

indra/newview/llmaterialmgr.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ boost::signals2::connection LLMaterialMgr::get(const LLUUID& region_id, const LL
234234
get_callback_map_t::iterator itCallback = mGetCallbacks.find(material_id);
235235
if (itCallback == mGetCallbacks.end())
236236
{
237-
std::pair<get_callback_map_t::iterator, bool> ret = mGetCallbacks.insert(std::pair<LLMaterialID, get_callback_t*>(material_id, new get_callback_t()));
237+
std::pair<get_callback_map_t::iterator, bool> ret = mGetCallbacks.emplace(material_id, std::make_unique<get_callback_t>());
238238
itCallback = ret.first;
239239
}
240240
connection = itCallback->second->connect(cb);;
@@ -279,7 +279,7 @@ boost::signals2::connection LLMaterialMgr::getTE(const LLUUID& region_id, const
279279
get_callback_te_map_t::iterator itCallback = mGetTECallbacks.find(te_mat_pair);
280280
if (itCallback == mGetTECallbacks.end())
281281
{
282-
std::pair<get_callback_te_map_t::iterator, bool> ret = mGetTECallbacks.insert(std::pair<TEMaterialPair, get_callback_te_t*>(te_mat_pair, new get_callback_te_t()));
282+
std::pair<get_callback_te_map_t::iterator, bool> ret = mGetTECallbacks.emplace(te_mat_pair, std::make_unique<get_callback_te_t>());
283283
itCallback = ret.first;
284284
}
285285
connection = itCallback->second->connect(cb);
@@ -317,7 +317,7 @@ boost::signals2::connection LLMaterialMgr::getAll(const LLUUID& region_id, LLMat
317317
getall_callback_map_t::iterator itCallback = mGetAllCallbacks.find(region_id);
318318
if (mGetAllCallbacks.end() == itCallback)
319319
{
320-
std::pair<getall_callback_map_t::iterator, bool> ret = mGetAllCallbacks.insert(std::pair<LLUUID, getall_callback_t*>(region_id, new getall_callback_t()));
320+
std::pair<getall_callback_map_t::iterator, bool> ret = mGetAllCallbacks.emplace(region_id, std::make_unique<getall_callback_t>());
321321
itCallback = ret.first;
322322
}
323323
return itCallback->second->connect(cb);;
@@ -329,8 +329,8 @@ void LLMaterialMgr::put(const LLUUID& object_id, const U8 te, const LLMaterial&
329329
if (mPutQueue.end() == itQueue)
330330
{
331331
LL_DEBUGS("Materials") << "mPutQueue insert object " << object_id << LL_ENDL;
332-
mPutQueue.insert(std::pair<LLUUID, facematerial_map_t>(object_id, facematerial_map_t()));
333-
itQueue = mPutQueue.find(object_id);
332+
auto ret = mPutQueue.emplace(object_id, facematerial_map_t());
333+
itQueue = ret.first;
334334
}
335335

336336
facematerial_map_t::iterator itFace = itQueue->second.find(te);
@@ -361,7 +361,7 @@ void LLMaterialMgr::setLocalMaterial(const LLUUID& region_id, LLMaterialPtr mate
361361
}
362362

363363
LL_DEBUGS("Materials") << "region " << region_id << "new local material id " << material_id << LL_ENDL;
364-
mMaterials.insert(std::pair<LLMaterialID, LLMaterialPtr>(material_id, material_ptr));
364+
mMaterials.emplace(material_id, material_ptr);
365365

366366
setMaterialCallbacks(material_id, material_ptr);
367367

@@ -376,7 +376,7 @@ const LLMaterialPtr LLMaterialMgr::setMaterial(const LLUUID& region_id, const LL
376376
{
377377
LL_DEBUGS("Materials") << "new material" << LL_ENDL;
378378
LLMaterialPtr newMaterial(new LLMaterial(material_data));
379-
std::pair<material_map_t::const_iterator, bool> ret = mMaterials.insert(std::pair<LLMaterialID, LLMaterialPtr>(material_id, newMaterial));
379+
std::pair<material_map_t::const_iterator, bool> ret = mMaterials.emplace(material_id, newMaterial);
380380
itMaterial = ret.first;
381381
}
382382

@@ -400,7 +400,6 @@ void LLMaterialMgr::setMaterialCallbacks(const LLMaterialID& material_id, const
400400
if (itCallbackTE != mGetTECallbacks.end())
401401
{
402402
(*itCallbackTE->second)(material_id, material_ptr, te_mat_pair.te);
403-
delete itCallbackTE->second;
404403
mGetTECallbacks.erase(itCallbackTE);
405404
}
406405
}
@@ -410,7 +409,6 @@ void LLMaterialMgr::setMaterialCallbacks(const LLMaterialID& material_id, const
410409
{
411410
(*itCallback->second)(material_id, material_ptr);
412411

413-
delete itCallback->second;
414412
mGetCallbacks.erase(itCallback);
415413
}
416414
}
@@ -509,7 +507,6 @@ void LLMaterialMgr::onGetAllResponse(bool success, const LLSD& content, const LL
509507
{
510508
(*itCallback->second)(region_id, materials);
511509

512-
delete itCallback->second;
513510
mGetAllCallbacks.erase(itCallback);
514511
}
515512

@@ -549,11 +546,11 @@ void LLMaterialMgr::onPutResponse(bool success, const LLSD& content)
549546
{
550547
llassert(response_data.isArray());
551548
LL_DEBUGS("Materials") << "response has "<< response_data.size() << " materials" << LL_ENDL;
549+
#ifdef SHOW_ASSERT // same condition that controls llassert()
552550
for (LLSD::array_const_iterator faceIter = response_data.beginArray(); faceIter != response_data.endArray(); ++faceIter)
553551
{
554-
# ifdef SHOW_ASSERT // same condition that controls llassert()
555552
const LLSD& face_data = *faceIter; // conditional to avoid unused variable warning
556-
# endif
553+
557554
llassert(face_data.isMap());
558555

559556
llassert(face_data.has(MATERIALS_CAP_OBJECT_ID_FIELD));
@@ -570,6 +567,7 @@ void LLMaterialMgr::onPutResponse(bool success, const LLSD& content)
570567

571568
// *TODO: do we really still need to process this?
572569
}
570+
#endif
573571
}
574572
}
575573

indra/newview/llmaterialmgr.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,13 @@ class LLMaterialMgr : public LLSingleton<LLMaterialMgr>
110110
typedef std::map<LLUUID, material_queue_t> get_queue_t;
111111
typedef std::pair<const LLUUID, LLMaterialID> pending_material_t;
112112
typedef std::map<const pending_material_t, F64> get_pending_map_t;
113-
typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t;
113+
typedef std::map<LLMaterialID, std::unique_ptr<get_callback_t>> get_callback_map_t;
114114

115115

116-
typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*> get_callback_te_map_t;
116+
typedef boost::unordered_map<TEMaterialPair, std::unique_ptr<get_callback_te_t>> get_callback_te_map_t;
117117
typedef std::set<LLUUID> getall_queue_t;
118118
typedef std::map<LLUUID, F64> getall_pending_map_t;
119-
typedef std::map<LLUUID, getall_callback_t*> getall_callback_map_t;
119+
typedef std::map<LLUUID, std::unique_ptr<getall_callback_t>> getall_callback_map_t;
120120
typedef std::map<U8, LLMaterial> facematerial_map_t;
121121
typedef std::map<LLUUID, facematerial_map_t> put_queue_t;
122122

0 commit comments

Comments
 (0)