summaryrefslogtreecommitdiffstats
path: root/rsShaderCache.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2011-01-05 03:37:48 -0800
committerJason Sams <rjsams@android.com>2011-01-05 03:37:48 -0800
commit2cbfc4ca83ef045f004b52cd3a89934ae0318c12 (patch)
tree22d7b500e13cb9115d990ff364d51a6e7573f136 /rsShaderCache.cpp
parent59962077fed57ff81f91b53a6a965dd4276f3544 (diff)
downloadandroid_frameworks_rs-2cbfc4ca83ef045f004b52cd3a89934ae0318c12.tar.gz
android_frameworks_rs-2cbfc4ca83ef045f004b52cd3a89934ae0318c12.tar.bz2
android_frameworks_rs-2cbfc4ca83ef045f004b52cd3a89934ae0318c12.zip
fix bug 3313505
Shader cache cleanup could occur in wrong thread during RS teardown. Change-Id: Iffed41de046147db30885e6815826e3b640020c1
Diffstat (limited to 'rsShaderCache.cpp')
-rw-r--r--rsShaderCache.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/rsShaderCache.cpp b/rsShaderCache.cpp
index 45384c98..b958021b 100644
--- a/rsShaderCache.cpp
+++ b/rsShaderCache.cpp
@@ -32,10 +32,7 @@ ShaderCache::ShaderCache() {
}
ShaderCache::~ShaderCache() {
- for (uint32_t ct=0; ct < mEntries.size(); ct++) {
- glDeleteProgram(mEntries[ct]->program);
- free(mEntries[ct]);
- }
+ cleanupAll();
}
void ShaderCache::updateUniformArrayData(Context *rsc, Program *prog, uint32_t linkedID,
@@ -251,5 +248,10 @@ void ShaderCache::cleanupFragment(uint32_t id) {
}
void ShaderCache::cleanupAll() {
+ for (uint32_t ct=0; ct < mEntries.size(); ct++) {
+ glDeleteProgram(mEntries[ct]->program);
+ free(mEntries[ct]);
+ }
+ mEntries.clear();
}