From aef7a17aa52e1d97e26fa07293d9cb8a604c111f Mon Sep 17 00:00:00 2001
From: Miguel Pozo <pragma37@gmail.com>
Date: Mon, 13 Nov 2023 15:35:11 +0100
Subject: [PATCH] Fix #114189: Workbench: VR Session crashes on exit

Ensure there's a valid GPU context when freeing a wm_surface.

Pull Request: https://projects.blender.org/blender/blender/pulls/114795
---
 source/blender/windowmanager/intern/wm_surface.cc | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/source/blender/windowmanager/intern/wm_surface.cc b/source/blender/windowmanager/intern/wm_surface.cc
index 900023f53a2..7d2ddc415ee 100644
--- a/source/blender/windowmanager/intern/wm_surface.cc
+++ b/source/blender/windowmanager/intern/wm_surface.cc
@@ -108,18 +108,16 @@ void wm_surface_add(wmSurface *surface)
 
 void wm_surface_remove(wmSurface *surface)
 {
-  if (surface == g_drawable) {
-    wm_surface_clear_drawable();
-  }
   BLI_remlink(&global_surface_list, surface);
+  /* Ensure GPU context is bound to free GPU resources. */
+  wm_surface_make_drawable(surface);
   surface->free_data(surface);
+  wm_surface_clear_drawable();
   MEM_freeN(surface);
 }
 
 void wm_surfaces_free()
 {
-  wm_surface_clear_drawable();
-
   LISTBASE_FOREACH_MUTABLE (wmSurface *, surf, &global_surface_list) {
     wm_surface_remove(surf);
   }
-- 
GitLab