diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-10-08 00:07:05 -0400 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-10-08 00:07:05 -0400 |
commit | 281acf421f4b977add75d736d1083413e1d5f24a (patch) | |
tree | 6c62fdef4e2753f2d657b2ef343762269cc5354f | |
parent | 7c12540f09659dec0a4222831ed7e5ab8d7b0cdf (diff) | |
parent | 2133640028ef53b33a93ecfb593d30c95fed84c6 (diff) | |
download | frameworks_base-281acf421f4b977add75d736d1083413e1d5f24a.zip frameworks_base-281acf421f4b977add75d736d1083413e1d5f24a.tar.gz frameworks_base-281acf421f4b977add75d736d1083413e1d5f24a.tar.bz2 |
Merge change I52479480 into eclair
* changes:
Retry overlay create if it fails. Bug 2153980.
-rw-r--r-- | camera/libcameraservice/CameraService.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index 8279914..b63e97f 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -563,7 +563,19 @@ status_t CameraService::Client::setOverlay() status_t ret = NO_ERROR; if (mSurface != 0) { if (mOverlayRef.get() == NULL) { - mOverlayRef = mSurface->createOverlay(w, h, OVERLAY_FORMAT_DEFAULT); + + // FIXME: + // Surfaceflinger may hold onto the previous overlay reference for some + // time after we try to destroy it. retry a few times. In the future, we + // should make the destroy call block, or possibly specify that we can + // wait in the createOverlay call if the previous overlay is in the + // process of being destroyed. + for (int retry = 0; retry < 50; ++retry) { + mOverlayRef = mSurface->createOverlay(w, h, OVERLAY_FORMAT_DEFAULT); + if (mOverlayRef != NULL) break; + LOGD("Overlay create failed - retrying"); + usleep(20000); + } if ( mOverlayRef.get() == NULL ) { LOGE("Overlay Creation Failed!"); |