[Bf-blender-cvs] [7edd60b35b4] master: GLFramebuffer: Avoid calling method on a partially destroyed GLContext

Clément Foucault noreply at git.blender.org
Tue Sep 1 18:43:00 CEST 2020


Commit: 7edd60b35b49f73ef96b2ae4d74a1db42f5c4a7c
Author: Clément Foucault
Date:   Tue Sep 1 18:39:56 2020 +0200
Branches: master
https://developer.blender.org/rB7edd60b35b49f73ef96b2ae4d74a1db42f5c4a7c

GLFramebuffer: Avoid calling method on a partially destroyed GLContext

This avoid an ASAN runtime error.

===================================================================

M	source/blender/gpu/opengl/gl_framebuffer.cc

===================================================================

diff --git a/source/blender/gpu/opengl/gl_framebuffer.cc b/source/blender/gpu/opengl/gl_framebuffer.cc
index d7dd5fa23a4..c97f4e2a270 100644
--- a/source/blender/gpu/opengl/gl_framebuffer.cc
+++ b/source/blender/gpu/opengl/gl_framebuffer.cc
@@ -75,7 +75,13 @@ GLFrameBuffer::GLFrameBuffer(
 GLFrameBuffer::~GLFrameBuffer()
 {
   if (context_ != NULL) {
-    context_->fbo_free(fbo_id_);
+    if (context_ == GPU_context_active_get()) {
+      /* Context might be partially freed. This happens when destroying the window framebuffers. */
+      glDeleteFramebuffers(1, &fbo_id_);
+    }
+    else {
+      context_->fbo_free(fbo_id_);
+    }
     /* Restore default framebuffer if this framebuffer was bound. */
     if (context_->active_fb == this && context_->back_left != this) {
       /* If this assert triggers it means the framebuffer is being freed while in use by another



More information about the Bf-blender-cvs mailing list