diff --git a/sdk/android/api/org/webrtc/EglRenderer.java b/sdk/android/api/org/webrtc/EglRenderer.java index 9004e7c1da..47bd0cf99e 100644 --- a/sdk/android/api/org/webrtc/EglRenderer.java +++ b/sdk/android/api/org/webrtc/EglRenderer.java @@ -290,7 +290,9 @@ public class EglRenderer implements VideoSink { // Release EGL and GL resources on render thread. renderThreadHandler.postAtFrontOfQueue(() -> { // Detach current shader program. - GLES20.glUseProgram(/* program= */ 0); + synchronized (EglBase.lock) { + GLES20.glUseProgram(/* program= */ 0); + } if (drawer != null) { drawer.release(); drawer = null; diff --git a/sdk/android/api/org/webrtc/GlShader.java b/sdk/android/api/org/webrtc/GlShader.java index db5c630663..8f4cda3ba6 100644 --- a/sdk/android/api/org/webrtc/GlShader.java +++ b/sdk/android/api/org/webrtc/GlShader.java @@ -114,7 +114,9 @@ public class GlShader { if (program == -1) { throw new RuntimeException("The program has been released"); } - GLES20.glUseProgram(program); + synchronized (EglBase.lock) { + GLES20.glUseProgram(program); + } GlUtil.checkNoGLES2Error("glUseProgram"); }