From 1233842012a257b7eb49eab354bb945593c974ed Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 13 Aug 2019 17:22:58 +0300 Subject: SL-11718 Crash in LLRender2D --- indra/llrender/llrender2dutils.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'indra/llrender/llrender2dutils.h') diff --git a/indra/llrender/llrender2dutils.h b/indra/llrender/llrender2dutils.h index cf408336e6..70ab006fd6 100644 --- a/indra/llrender/llrender2dutils.h +++ b/indra/llrender/llrender2dutils.h @@ -139,6 +139,13 @@ public: LLPointer getUIImage(const std::string& name, S32 priority = 0); LLVector2 mGLScaleFactor; + +protected: + // since LLRender2D has no control of image provider's lifecycle + // we need a way to tell LLRender2D that provider died and + // LLRender2D needs to be updated. + static void resetProvider(); + private: LLImageProviderInterface* mImageProvider; }; @@ -147,11 +154,21 @@ class LLImageProviderInterface { protected: LLImageProviderInterface() {}; - virtual ~LLImageProviderInterface() {}; + virtual ~LLImageProviderInterface(); public: virtual LLPointer getUIImage(const std::string& name, S32 priority) = 0; virtual LLPointer getUIImageByID(const LLUUID& id, S32 priority) = 0; virtual void cleanUp() = 0; + + // to notify holders when pointer gets deleted + typedef void(*callback_t)(); + void addOnRemovalCallback(callback_t func); + void deleteOnRemovalCallback(callback_t func); + +private: + + typedef std::list< callback_t > callback_list_t; + callback_list_t mCallbackList; }; -- cgit v1.3