Correctly free resouces bound to scripts when the scripts are deleted.

Change-Id: Idfcc30f1a7de0badeb6d8254ed508938d89f4070
b: 3381615
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index 3858e1c..fc673a2 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -94,16 +94,24 @@
 }
 
 ScriptC::ScriptC(Context *rsc) : Script(rsc) {
-    LOGD(">>>> ScriptC ctor called, obj=%p", this);
     mBccScript = NULL;
     memset(&mProgram, 0, sizeof(mProgram));
 }
 
 ScriptC::~ScriptC() {
-    LOGD(">>>> ~ScriptC() mBccScript = %p", mBccScript);
     if (mBccScript) {
+        if (mProgram.mObjectSlotList) {
+            for (size_t ct=0; ct < mProgram.mObjectSlotCount; ct++) {
+                setVarObj(mProgram.mObjectSlotList[ct], NULL);
+            }
+            delete [] mProgram.mObjectSlotList;
+            mProgram.mObjectSlotList = NULL;
+            mProgram.mObjectSlotCount = 0;
+        }
+
+
+        LOGD(">>>> ~ScriptC  bccDisposeScript(%p)", mBccScript);
         bccDisposeScript(mBccScript);
-        LOGD(">>>> ~ScriptC(mBCCScript)");
     }
     free(mEnviroment.mScriptText);
     mEnviroment.mScriptText = NULL;
@@ -589,6 +597,16 @@
             return false;
         }
     }
+
+    size_t objectSlotCount = bccGetObjectSlotCount(s->mBccScript);
+    uint32_t *objectSlots = NULL;
+    if (objectSlotCount) {
+        objectSlots = new uint32_t[objectSlotCount];
+        bccGetObjectSlotList(s->mBccScript, objectSlotCount, objectSlots);
+        s->mProgram.mObjectSlotList = objectSlots;
+        s->mProgram.mObjectSlotCount = objectSlotCount;
+    }
+
     return true;
 }