diff options
| author | 2010-01-26 10:07:23 -0800 | |
|---|---|---|
| committer | 2010-01-26 10:07:23 -0800 | |
| commit | e7b2845d685a583e8e84de369b6acfa1bebeabf4 (patch) | |
| tree | 6c67a066e0f39d35cce1144ed757cb68f992bddd /libs/ui/Surface.cpp | |
| parent | caf0ce3ca2b3deba4bcff6c920740bafd87f2b62 (diff) | |
| parent | 3348f5ae6e3744049d7cdae378748998b7635231 (diff) | |
Merge "DO NOT MERGE return an error when Surface::lock() is called while the surface is already locked." into eclair-mr2
Diffstat (limited to 'libs/ui/Surface.cpp')
| -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 24ae27f286d4..c7be05beff1c 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();  |