[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