diff options
author | Mathias Agopian <mathias@google.com> | 2010-01-22 11:52:08 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-01-22 11:52:08 -0800 |
commit | 519f29f5d8e097b3a35a650d92ed0ad07773c9e2 (patch) | |
tree | 5d9c75dd3ea3c752e99c2c52c73d946d2c8570f1 /libs/ui | |
parent | 3983e26292173fb08de57b8617de9193e8f0d2f9 (diff) | |
parent | 9014726d8954a003323d65ba639b2544f8ecea2e (diff) | |
download | frameworks_native-519f29f5d8e097b3a35a650d92ed0ad07773c9e2.zip frameworks_native-519f29f5d8e097b3a35a650d92ed0ad07773c9e2.tar.gz frameworks_native-519f29f5d8e097b3a35a650d92ed0ad07773c9e2.tar.bz2 |
Merge "return an error when Surface::lock() is called while the surface is already locked."
Diffstat (limited to 'libs/ui')
-rw-r--r-- | libs/ui/Surface.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp index 24ae27f..c7be05b 100644 --- a/libs/ui/Surface.cpp +++ b/libs/ui/Surface.cpp @@ -607,13 +607,21 @@ status_t Surface::lock(SurfaceInfo* info, bool blocking) { status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn, bool blocking) { if (mApiLock.tryLock() != NO_ERROR) { - LOGE("calling Surface::lock() from different threads!"); + LOGE("calling Surface::lock from different threads!"); CallStack stack; stack.update(); stack.dump("Surface::lock called from different threads"); return WOULD_BLOCK; } + + /* Here we're holding mApiLock */ + if (mLockedBuffer != 0) { + LOGE("Surface::lock failed, already locked"); + mApiLock.unlock(); + return INVALID_OPERATION; + } + // we're intending to do software rendering from this point setUsage(GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN); @@ -682,8 +690,8 @@ status_t Surface::lock(SurfaceInfo* other, Region* dirtyIn, bool blocking) status_t Surface::unlockAndPost() { if (mLockedBuffer == 0) { - LOGE("unlockAndPost failed, no locked buffer"); - return BAD_VALUE; + LOGE("Surface::unlockAndPost failed, no locked buffer"); + return INVALID_OPERATION; } status_t err = mLockedBuffer->unlock(); |