From 238b15d54395df53d2219dc12a91e3bfd9c6fa23 Mon Sep 17 00:00:00 2001 From: magjed Date: Fri, 23 Oct 2015 18:14:25 -0700 Subject: [PATCH] SurfaceViewRenderer: Remove use of quitSafely() because it's API lvl 18 I replaced quitSafely() with a CountDownLatch. The reason for not using ThreadUtils.invokeUninterruptibly() is that I want to stop accepting frames asap, and invokeUninterruptibly() would still accept frames during the waiting time. BUG=webrtc:4742 Review URL: https://codereview.webrtc.org/1418223002 Cr-Commit-Position: refs/heads/master@{#10393} --- .../java/android/org/webrtc/SurfaceViewRenderer.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java b/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java index 32810749da..d7c9e2af0a 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);