Index: webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java |
diff --git a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java |
index 2955f7412d10f8be22a324536f777eb0e13a69b2..10f8ddcf306bf0945b882d7ff580cfd49e8c4724 100644 |
--- a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java |
+++ b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java |
@@ -450,8 +450,12 @@ class SurfaceTextureHelper { |
isTextureInUse = true; |
hasPendingTexture = false; |
- eglBase.makeCurrent(); |
- surfaceTexture.updateTexImage(); |
+ // SurfaceTexture.updateTexImage apparently can compete and deadlock with eglSwapBuffers, |
+ // as observed on Nexus 5. Therefore, synchronize it with the EGL functions. |
+ // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5702 for more info. |
+ synchronized (EglBase.lock) { |
+ surfaceTexture.updateTexImage(); |
+ } |
final float[] transformMatrix = new float[16]; |
surfaceTexture.getTransformMatrix(transformMatrix); |
@@ -472,7 +476,6 @@ class SurfaceTextureHelper { |
if (yuvConverter != null) |
yuvConverter.release(); |
} |
- eglBase.makeCurrent(); |
GLES20.glDeleteTextures(1, new int[] {oesTextureId}, 0); |
surfaceTexture.release(); |
eglBase.release(); |