| Index: webrtc/api/java/android/org/webrtc/EglBase14.java | 
| diff --git a/webrtc/api/java/android/org/webrtc/EglBase14.java b/webrtc/api/java/android/org/webrtc/EglBase14.java | 
| index 5b377e0bad1a073800f7f2c9dc25d304004868a9..6ac61d062ca9baa36599197cb7d0d520cff8756c 100644 | 
| --- a/webrtc/api/java/android/org/webrtc/EglBase14.java | 
| +++ b/webrtc/api/java/android/org/webrtc/EglBase14.java | 
| @@ -168,17 +168,21 @@ public final class EglBase14 extends EglBase { | 
| if (eglSurface == EGL14.EGL_NO_SURFACE) { | 
| throw new RuntimeException("No EGLSurface - can't make current"); | 
| } | 
| -    if (!EGL14.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext)) { | 
| -      throw new RuntimeException("eglMakeCurrent failed"); | 
| +    synchronized (EglBase.lock) { | 
| +      if (!EGL14.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext)) { | 
| +        throw new RuntimeException("eglMakeCurrent failed"); | 
| +      } | 
| } | 
| } | 
|  | 
| // Detach the current EGL context, so that it can be made current on another thread. | 
| @Override | 
| public void detachCurrent() { | 
| -    if (!EGL14.eglMakeCurrent( | 
| -        eglDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT)) { | 
| -      throw new RuntimeException("eglMakeCurrent failed"); | 
| +    synchronized (EglBase.lock) { | 
| +      if (!EGL14.eglMakeCurrent( | 
| +          eglDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT)) { | 
| +        throw new RuntimeException("eglDetachCurrent failed"); | 
| +      } | 
| } | 
| } | 
|  | 
| @@ -188,7 +192,9 @@ public final class EglBase14 extends EglBase { | 
| if (eglSurface == EGL14.EGL_NO_SURFACE) { | 
| throw new RuntimeException("No EGLSurface - can't swap buffers"); | 
| } | 
| -    EGL14.eglSwapBuffers(eglDisplay, eglSurface); | 
| +    synchronized (EglBase.lock) { | 
| +      EGL14.eglSwapBuffers(eglDisplay, eglSurface); | 
| +    } | 
| } | 
|  | 
| public void swapBuffers(long timeStampNs) { | 
| @@ -196,9 +202,11 @@ public final class EglBase14 extends EglBase { | 
| if (eglSurface == EGL14.EGL_NO_SURFACE) { | 
| throw new RuntimeException("No EGLSurface - can't swap buffers"); | 
| } | 
| -    // See https://android.googlesource.com/platform/frameworks/native/+/tools_r22.2/opengl/specs/EGL_ANDROID_presentation_time.txt | 
| -    EGLExt.eglPresentationTimeANDROID(eglDisplay, eglSurface, timeStampNs); | 
| -    EGL14.eglSwapBuffers(eglDisplay, eglSurface); | 
| +    synchronized (EglBase.lock) { | 
| +      // See https://android.googlesource.com/platform/frameworks/native/+/tools_r22.2/opengl/specs/EGL_ANDROID_presentation_time.txt | 
| +      EGLExt.eglPresentationTimeANDROID(eglDisplay, eglSurface, timeStampNs); | 
| +      EGL14.eglSwapBuffers(eglDisplay, eglSurface); | 
| +    } | 
| } | 
|  | 
| // Return an EGLDisplay, or die trying. | 
|  |