Null eagerly in MarkDestroyed. r?jrmuizel draft
authorJeff Gilbert <jdashg@gmail.com>
Tue, 12 Apr 2016 18:48:15 -0700
changeset 350562 e34378559078c228439d7f5f4fc0756513ce5cae
parent 350561 cbcc23bbb542d33705c7bc5603f536c8085238a9
child 350563 3eee579819e03d42745913f376ea85758f87273c
push id15372
push userjgilbert@mozilla.com
push dateThu, 14 Apr 2016 00:15:20 +0000
reviewersjrmuizel
milestone48.0a1
Null eagerly in MarkDestroyed. r?jrmuizel From 5ee22edfd3cc4364806d7d1cf82e651760dbcbb9 Mon Sep 17 00:00:00 2001 --- gfx/gl/GLBlitHelper.cpp | 3 +++ gfx/gl/GLContext.cpp | 7 ++++--- gfx/gl/GLReadTexImageHelper.cpp | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) MozReview-Commit-ID: 7fvLeQK7lyJ
gfx/gl/GLBlitHelper.cpp
gfx/gl/GLContext.cpp
gfx/gl/GLReadTexImageHelper.cpp
--- a/gfx/gl/GLBlitHelper.cpp
+++ b/gfx/gl/GLBlitHelper.cpp
@@ -63,16 +63,19 @@ GLBlitHelper::GLBlitHelper(GLContext* gl
     , mTexHeight(0)
     , mCurYScale(1.0f)
     , mCurCbCrScale(1.0f)
 {
 }
 
 GLBlitHelper::~GLBlitHelper()
 {
+    if (!mGL->MakeCurrent())
+        return;
+
     DeleteTexBlitProgram();
 
     GLuint tex[] = {
         mSrcTexY,
         mSrcTexCb,
         mSrcTexCr,
         mSrcTexEGL,
     };
--- a/gfx/gl/GLContext.cpp
+++ b/gfx/gl/GLContext.cpp
@@ -2351,22 +2351,23 @@ GLContext::ClearSafely()
 }
 
 void
 GLContext::MarkDestroyed()
 {
     if (IsDestroyed())
         return;
 
+    // Null these before they're naturally nulled after dtor, as we want GLContext to
+    // still be alive in *their* dtors.
     mScreen = nullptr;
+    mBlitHelper = nullptr;
+    mReadTexImageHelper = nullptr;
 
     if (MakeCurrent()) {
-        mBlitHelper = nullptr;
-        mReadTexImageHelper = nullptr;
-
         mTexGarbageBin->GLContextTeardown();
     } else {
         NS_WARNING("MakeCurrent() failed during MarkDestroyed! Skipping GL object teardown.");
     }
 
     mSymbols.Zero();
 }
 
--- a/gfx/gl/GLReadTexImageHelper.cpp
+++ b/gfx/gl/GLReadTexImageHelper.cpp
@@ -27,16 +27,19 @@ GLReadTexImageHelper::GLReadTexImageHelp
     mPrograms[0] = 0;
     mPrograms[1] = 0;
     mPrograms[2] = 0;
     mPrograms[3] = 0;
 }
 
 GLReadTexImageHelper::~GLReadTexImageHelper()
 {
+    if (!mGL->MakeCurrent())
+        return;
+
     mGL->fDeleteProgram(mPrograms[0]);
     mGL->fDeleteProgram(mPrograms[1]);
     mGL->fDeleteProgram(mPrograms[2]);
     mGL->fDeleteProgram(mPrograms[3]);
 }
 
 static const GLchar
 readTextureImageVS[] =