Fix deadlock in Android stopCapture() call.
BUG=3467
R=braveyao@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/18789004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6673 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/video_capture/android/video_capture_android.cc b/webrtc/modules/video_capture/android/video_capture_android.cc
index 6f0200e..4bc14e5 100644
--- a/webrtc/modules/video_capture/android/video_capture_android.cc
+++ b/webrtc/modules/video_capture/android/video_capture_android.cc
@@ -130,6 +130,8 @@
int32_t VideoCaptureAndroid::OnIncomingFrame(uint8_t* videoFrame,
int32_t videoFrameLength,
int64_t captureTime) {
+ if (!_captureStarted)
+ return 0;
return IncomingFrame(
videoFrame, videoFrameLength, _captureCapability, captureTime);
}
@@ -209,13 +211,16 @@
}
int32_t VideoCaptureAndroid::StopCapture() {
- CriticalSectionScoped cs(&_apiCs);
+ _apiCs.Enter();
AttachThreadScoped ats(g_jvm);
JNIEnv* env = ats.env();
memset(&_requestedCapability, 0, sizeof(_requestedCapability));
memset(&_captureCapability, 0, sizeof(_captureCapability));
_captureStarted = false;
+ // Exit critical section to avoid blocking camera thread inside
+ // onIncomingFrame() call.
+ _apiCs.Leave();
jmethodID j_stop =
env->GetMethodID(g_java_capturer_class, "stopCapture", "()Z");