Index: talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java |
diff --git a/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java b/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java |
index 99f33d7d07986b93c943278f72552a459e6cb46c..18df062326c9e4d7703479ec5c47a5e081b07ea4 100644 |
--- a/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java |
+++ b/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java |
@@ -40,6 +40,8 @@ import android.view.SurfaceView; |
import org.webrtc.Logging; |
+import java.util.concurrent.CountDownLatch; |
+ |
import javax.microedition.khronos.egl.EGLContext; |
/** |
@@ -190,6 +192,7 @@ public class SurfaceViewRenderer extends SurfaceView |
* don't call this function, the GL resources might leak. |
*/ |
public void release() { |
+ final CountDownLatch eglCleanupBarrier = new CountDownLatch(1); |
synchronized (handlerLock) { |
if (renderThreadHandler == null) { |
Logging.d(TAG, "Already released"); |
@@ -214,13 +217,15 @@ public class SurfaceViewRenderer extends SurfaceView |
} |
eglBase.release(); |
eglBase = null; |
+ eglCleanupBarrier.countDown(); |
} |
}); |
// Don't accept any more frames or messages to the render thread. |
renderThreadHandler = null; |
} |
- // Quit safely to make sure the EGL/GL cleanup posted above is executed. |
- renderThread.quitSafely(); |
+ // Make sure the EGL/GL cleanup posted above is executed. |
+ ThreadUtils.awaitUninterruptibly(eglCleanupBarrier); |
+ renderThread.quit(); |
synchronized (frameLock) { |
if (pendingFrame != null) { |
VideoRenderer.renderFrameDone(pendingFrame); |