Commit: f98cab1c4ba2633fe0f3793bca713fae21685ce2
Author: Julian Eisel
Date:   Fri Dec 23 20:39:14 2016 +0100
Branches: workspaces
https://developer.blender.org/rBf98cab1c4ba2633fe0f3793bca713fae21685ce2

Remove temp workspace when closing temp window (e.g. UserPrefs)

The active screen of the workspace was freed which caused use-after-free in 
some corner-cases. Now workspace, workspace layout and the screen are deleted 
correctly.

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

M       source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/windowmanager/intern/wm_window.c 
b/source/blender/windowmanager/intern/wm_window.c
index bb74466..7ca6596 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -328,7 +328,8 @@ void wm_window_close(bContext *C, wmWindowManager *wm, 
wmWindow *win)
        }
        else {
                bScreen *screen = WM_window_get_active_screen(win);
-               
+               WorkSpace *workspace = win->workspace;
+
                BLI_remlink(&wm->windows, win);
                
                wm_draw_window_clear(win);
@@ -348,7 +349,10 @@ void wm_window_close(bContext *C, wmWindowManager *wm, 
wmWindow *win)
                /* if temp screen, delete it after window free (it stops jobs 
that can access it) */
                if (screen && screen->temp) {
                        Main *bmain = CTX_data_main(C);
-                       BKE_libblock_free(bmain, screen);
+                       WorkSpaceLayout *layout = 
BKE_workspace_active_layout_get(workspace);
+
+                       BKE_workspace_layout_remove(workspace, layout, bmain);
+                       BKE_libblock_free(bmain, workspace);
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to