| 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();
|
|
|