[Bf-blender-cvs] [3270155b081] temp-workspace-multi-window: Fix crashes closing windows or Blender itself
Julian Eisel
noreply at git.blender.org
Wed Mar 8 17:10:25 CET 2017
Commit: 3270155b0813f123dc3b90a9b5f15743810638c6
Author: Julian Eisel
Date: Wed Mar 8 17:07:24 2017 +0100
Branches: temp-workspace-multi-window
https://developer.blender.org/rB3270155b0813f123dc3b90a9b5f15743810638c6
Fix crashes closing windows or Blender itself
===================================================================
M source/blender/blenkernel/intern/workspace.c
M source/blender/windowmanager/intern/wm_window.c
===================================================================
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 28b7a28cb42..e66923bd543 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -165,7 +165,6 @@ void BKE_workspace_hook_delete(Main *bmain, WorkSpaceHook *hook)
}
BLI_freelinkN(&hooks_all, hook);
- MEM_freeN(hook);
}
@@ -470,9 +469,11 @@ WorkSpace *BKE_workspace_active_get(const WorkSpaceHook *hook)
void BKE_workspace_active_set(WorkSpaceHook *hook, WorkSpace *workspace)
{
hook->act_workspace = workspace;
- for (WorkSpaceLayout *layout = hook->layouts.first; layout; layout = layout->next) {
- if (layout->type == workspace->act_layout_type) {
- hook->act_layout = layout;
+ if (workspace) {
+ for (WorkSpaceLayout *layout = hook->layouts.first; layout; layout = layout->next) {
+ if (layout->type == workspace->act_layout_type) {
+ hook->act_layout = layout;
+ }
}
}
}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index f8a50c7ba60..8b0c3c0751f 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -332,7 +332,6 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
}
else {
bScreen *screen = WM_window_get_active_screen(win);
- WorkSpace *workspace = WM_window_get_active_workspace(win);
BLI_remlink(&wm->windows, win);
@@ -347,17 +346,8 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
if (screen) {
ED_screen_exit(C, win, screen);
}
-
- wm_window_free(bmain, C, wm, win);
-
- /* if temp screen, delete it after window free (it stops jobs that can access it) */
- if (screen && screen->temp) {
- WorkSpaceLayout *layout = BKE_workspace_hook_active_layout_get(win->workspace_hook);
- BLI_assert(BKE_workspace_layout_screen_get(layout) == screen);
- BKE_workspace_layout_remove(workspace, layout, bmain);
- BKE_libblock_free(bmain, workspace);
- }
+ wm_window_free(bmain, C, wm, win);
}
}
More information about the Bf-blender-cvs
mailing list