[Bf-blender-cvs] [f98cab1] workspaces: Remove temp workspace when closing temp window (e.g. UserPrefs)
Julian Eisel
noreply at git.blender.org
Fri Dec 23 20:42:09 CET 2016
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);
}
}
}
More information about the Bf-blender-cvs
mailing list