Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49945c0f authored by Jason Sams's avatar Jason Sams
Browse files

fix bug 3313505

Shader cache cleanup could occur in wrong thread
during RS teardown.

Change-Id: Iffed41de046147db30885e6815826e3b640020c1
parent e4c453dd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -535,6 +535,7 @@ void Context::destroyWorkerThreadResources() {
         mStateFragment.deinit(this);
         mStateFragmentStore.deinit(this);
         mStateFont.deinit(this);
         mShaderCache.cleanupAll();
    }
    ObjectBase::zeroAllUserRef(this);
    LOGV("destroyWorkerThreadResources 2");
+6 −4
Original line number Diff line number Diff line
@@ -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();
}