summaryrefslogtreecommitdiffstats
path: root/libs/ui
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-01-22 11:52:08 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-01-22 11:52:08 -0800
commitf226e9f27baa5a29aacffab87e0c0fc52d59fe13 (patch)
tree6e5c930152fbfbe66b757a956600255cf90759ef /libs/ui
parenta93e4591496d5415e4cf9412ae2dc54b05b4214b (diff)
parent116e541eacde53f8c83e1136229d8653bad6bf61 (diff)
downloadframeworks_base-f226e9f27baa5a29aacffab87e0c0fc52d59fe13.zip
frameworks_base-f226e9f27baa5a29aacffab87e0c0fc52d59fe13.tar.gz
frameworks_base-f226e9f27baa5a29aacffab87e0c0fc52d59fe13.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.cpp14
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();