diff options
author | 2011-01-27 00:14:13 -0800 | |
---|---|---|
committer | 2011-01-27 19:36:54 -0800 | |
commit | 38f8d9d7a17037a34f4df229b1089536a6cdc8dc (patch) | |
tree | 860fe9cead9a082b87a466210cba1eb98fadf694 /libs/rs/rsScriptC.cpp | |
parent | 64a2c359aeda59e4bc43d48f31ade919e918ea26 (diff) |
Correctly free resouces bound to scripts when the scripts are deleted.
Change-Id: Idfcc30f1a7de0badeb6d8254ed508938d89f4070
b: 3381615
Diffstat (limited to 'libs/rs/rsScriptC.cpp')
-rw-r--r-- | libs/rs/rsScriptC.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index 3858e1cfc0de..fc673a2d517b 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -94,16 +94,24 @@ char *genCacheFileName(const char *cacheDir, } 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 @@ bool ScriptCState::runCompiler(Context *rsc, 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; } |