From a27466ca07e5568442053e02ac9e76297ee74787 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Thu, 21 Sep 2017 12:19:02 +0300
Subject: [PATCH] MAINT-7822 Crash in LLScriptFloaterManager()

---
 indra/newview/llscriptfloater.cpp | 15 ++++++++++++++-
 indra/newview/llscriptfloater.h   |  1 +
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index b2c450aa0c7..da912ef3d48 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -349,8 +349,8 @@ void LLScriptFloater::hideToastsIfNeeded()
 //////////////////////////////////////////////////////////////////////////
 
 LLScriptFloaterManager::LLScriptFloaterManager()
+		: mDialogLimitationsSlot()
 {
-	gSavedSettings.getControl("ScriptDialogLimitations")->getCommitSignal()->connect(boost::bind(&clearScriptNotifications));
 }
 
 void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
@@ -361,6 +361,19 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
 		return;
 	}
 
+	if (!mDialogLimitationsSlot.connected())
+	{
+		LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl("ScriptDialogLimitations");
+		if (cntrl_ptr.notNull())
+		{
+			mDialogLimitationsSlot = cntrl_ptr->getCommitSignal()->connect(boost::bind(&clearScriptNotifications));
+		}
+		else
+		{
+			LL_WARNS() << "Unable to set signal on setting 'ScriptDialogLimitations'" << LL_ENDL;
+		}
+	}
+
 	// get scripted Object's ID
 	LLUUID object_id = notification_id_to_object_id(notification_id);
 	
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index 0192a8893e1..3695b8a3e12 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -139,6 +139,7 @@ class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager>
 	typedef std::map<LLUUID, FloaterPositionInfo> floater_position_map_t;
 
 	floater_position_map_t mFloaterPositions;
+	boost::signals2::connection mDialogLimitationsSlot;
 };
 
 /**
-- 
GitLab