Add lock before calling initEglImage

Without that lock, there is a chance of race condition
where while composing a specific index, requestBuf with
the same index can be executed and touch the
same data that is being used in initEglImage.
(e.g. dirty flag in texture)
This commit is contained in:
Kobi Cohen Arazi
2011-04-15 10:38:33 -07:00
parent 08d9d9a462
commit 8ecc90d00d

View File

@@ -874,8 +874,16 @@ status_t Layer::BufferManager::initEglImage(EGLDisplay dpy,
ssize_t index = mActiveBuffer;
if (index >= 0) {
if (!mFailover) {
Image& texture(mBufferData[index].texture);
err = mTextureManager.initEglImage(&texture, dpy, buffer);
{
// Without that lock, there is a chance of race condition
// where while composing a specific index, requestBuf
// with the same index can be executed and touch the same data
// that is being used in initEglImage.
// (e.g. dirty flag in texture)
Mutex::Autolock _l(mLock);
Image& texture(mBufferData[index].texture);
err = mTextureManager.initEglImage(&texture, dpy, buffer);
}
// if EGLImage fails, we switch to regular texture mode, and we
// free all resources associated with using EGLImages.
if (err == NO_ERROR) {