Null eagerly in MarkDestroyed. r?jrmuizel
draft
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
--- 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[] =