From 173886fec32f2f5a8b63e81997f5929b02ddc8c9 Mon Sep 17 00:00:00 2001
From: ruslantproductengine <ruslantproductengine@lindenlab.com>
Date: Thu, 10 Mar 2016 19:50:12 +0200
Subject: MAINT-1109 FIXED Toggling graphics options causes viewer memory to
 increase, eventually causing the rendering pipeline to fall over and crashing
 the viewer Patchset #2

---
 indra/llrender/llglslshader.cpp  | 9 ++-------
 indra/newview/llviewerwindow.cpp | 7 +++++++
 2 files changed, 9 insertions(+), 7 deletions(-)

(limited to 'indra')

diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 52b8de8365..750e35a71a 100755
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -345,15 +345,10 @@ void LLGLSLShader::unloadInternal()
         GLhandleARB obj[1024];
         GLsizei count;
 
-        glGetAttachedObjectsARB(mProgramObject, 1024, &count, obj);
+        glGetAttachedObjectsARB(mProgramObject, sizeof(obj)/sizeof(obj[0]), &count, obj);
         for (GLsizei i = 0; i < count; i++)
         {
-#if !LL_DARWIN
-            if (glIsProgramARB(obj[i]))
-#endif
-            {
-                glDeleteObjectARB(obj[i]);
-            }
+            glDeleteObjectARB(obj[i]);
         }
 
         glDeleteObjectARB(mProgramObject);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index f96c4b7bf0..d3416ec5fc 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -4951,6 +4951,13 @@ void LLViewerWindow::stopGL(BOOL save_state)
 		
 		gGLManager.mIsDisabled = TRUE;
 		stop_glerror();
+
+		//unload shader's
+		while (LLGLSLShader::sInstances.size())
+		{
+			LLGLSLShader* shader = *(LLGLSLShader::sInstances.begin());
+			shader->unload();
+		}
 		
 		LL_INFOS() << "Remaining allocated texture memory: " << LLImageGL::sGlobalTextureMemory.value() << " bytes" << LL_ENDL;
 	}
-- 
cgit v1.2.3