summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jason Sams <rjsams@android.com> 2011-11-22 12:49:11 -0800
committer Jason Sams <rjsams@android.com> 2011-11-22 13:17:18 -0800
commitdd39fdfe99a08b0bbb03eba8f32cad4018271def (patch)
tree01ae28f76d5edc975ad53b881de6fd73d392af5b
parentec99c62e8b7c223c86a89008219be6c78f14eab8 (diff)
Fix script init error handling.
Change-Id: I7ceb0af4dfd12db0274985ff658f678d7af829ff
-rw-r--r--libs/rs/rsScript.cpp1
-rw-r--r--libs/rs/rsScript.h1
-rw-r--r--libs/rs/rsScriptC.cpp11
3 files changed, 10 insertions, 3 deletions
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index 16446ddd5c6c..7fc128e8d243 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -26,6 +26,7 @@ Script::Script(Context *rsc) : ObjectBase(rsc) {
mSlots = NULL;
mTypes = NULL;
+ mInitialized = false;
}
Script::~Script() {
diff --git a/libs/rs/rsScript.h b/libs/rs/rsScript.h
index abb55b8faa4c..976ae78fb23e 100644
--- a/libs/rs/rsScript.h
+++ b/libs/rs/rsScript.h
@@ -85,6 +85,7 @@ public:
virtual void setupScript(Context *rsc) = 0;
virtual uint32_t run(Context *) = 0;
protected:
+ bool mInitialized;
ObjectBaseRef<Allocation> *mSlots;
ObjectBaseRef<const Type> *mTypes;
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index b45366beb109..a5b1902765bc 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -44,8 +44,10 @@ ScriptC::~ScriptC() {
BT = NULL;
}
#endif
- mRSC->mHal.funcs.script.invokeFreeChildren(mRSC, this);
- mRSC->mHal.funcs.script.destroy(mRSC, this);
+ if (mInitialized) {
+ mRSC->mHal.funcs.script.invokeFreeChildren(mRSC, this);
+ mRSC->mHal.funcs.script.destroy(mRSC, this);
+ }
}
void ScriptC::setupScript(Context *rsc) {
@@ -212,8 +214,11 @@ bool ScriptC::runCompiler(Context *rsc,
bitcodeLen = BT->getTranslatedBitcodeSize();
#endif
- rsc->mHal.funcs.script.init(rsc, this, resName, cacheDir, bitcode, bitcodeLen, 0);
+ if (!rsc->mHal.funcs.script.init(rsc, this, resName, cacheDir, bitcode, bitcodeLen, 0)) {
+ return false;
+ }
+ mInitialized = true;
mEnviroment.mFragment.set(rsc->getDefaultProgramFragment());
mEnviroment.mVertex.set(rsc->getDefaultProgramVertex());
mEnviroment.mFragmentStore.set(rsc->getDefaultProgramStore());