Timeout on wait lock and throw exception to prevent ANR.
Change-Id: I5b0d2b8c0384d32ed0d870e5db6003991524fc38
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java
index b026a83..36a07c5 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java
@@ -693,22 +693,22 @@
* @param jobMsg The message to log when the job runs timeout.
* @return Whether the job finishes before timeout.
*/
- public boolean runJobSync(final Runnable job, Object waitLock, long timeoutMs, String jobMsg) {
+ public void runJobSync(final Runnable job, Object waitLock, long timeoutMs, String jobMsg) {
+ String timeoutMsg = "Timeout waiting " + timeoutMs + "ms for " + jobMsg;
synchronized (waitLock) {
long timeoutBound = SystemClock.uptimeMillis() + timeoutMs;
try {
runJob(job);
- waitLock.wait();
- } catch (InterruptedException ex) {
- Log.w(TAG, "Job interrupted");
+ waitLock.wait(timeoutMs);
if (SystemClock.uptimeMillis() > timeoutBound) {
- // Timeout.
- Log.w(TAG, "Timeout waiting camera operation:" + jobMsg);
+ throw new IllegalStateException(timeoutMsg);
}
- return false;
+ } catch (InterruptedException ex) {
+ if (SystemClock.uptimeMillis() > timeoutBound) {
+ throw new IllegalStateException(timeoutMsg);
+ }
}
}
- return true;
}
/**