[Bf-blender-cvs] [fdf5834b444] blender2.8: Fix crash reading old userpref.blend

Sergey Sharybin noreply at git.blender.org
Mon Apr 23 11:46:42 CEST 2018


Commit: fdf5834b444de90507bdc67e979e42fcfecc6bd6
Author: Sergey Sharybin
Date:   Mon Apr 23 11:45:40 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBfdf5834b444de90507bdc67e979e42fcfecc6bd6

Fix crash reading old userpref.blend

While window manager is supposed to exist after file was fully read
and do-versioned, we can not rely on window manager to exist while
reading file and setting up an environment.

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

M	source/blender/blenloader/intern/versioning_280.c

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

diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 661b7b53260..09e53bc9eb7 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -654,32 +654,34 @@ void do_versions_after_linking_280(Main *main)
 	/* SpaceTime & SpaceLogic removal/replacing */
 	if (!MAIN_VERSION_ATLEAST(main, 280, 9)) {
 		const wmWindowManager *wm = main->wm.first;
-		const Scene *scene = main->scene.first;
+		if (wm != NULL) {
+			const Scene *scene = main->scene.first;
 
-		/* Action editors need a scene for creation. First, update active
-		 * screens using the active scene of the window they're displayed in.
-		 * Next, update remaining screens using first scene in main listbase. */
+			/* Action editors need a scene for creation. First, update active
+			 * screens using the active scene of the window they're displayed in.
+			 * Next, update remaining screens using first scene in main listbase. */
 
-		for (wmWindow *win = wm->windows.first; win; win = win->next) {
-			const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
-			for (ScrArea *area = screen->areabase.first; area; area = area->next) {
-				if (ELEM(area->butspacetype, SPACE_TIME, SPACE_LOGIC)) {
-					do_version_area_change_space_to_space_action(area, win->scene);
+			for (wmWindow *win = wm->windows.first; win; win = win->next) {
+				const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
+				for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+					if (ELEM(area->butspacetype, SPACE_TIME, SPACE_LOGIC)) {
+						do_version_area_change_space_to_space_action(area, win->scene);
 
-					/* Don't forget to unset! */
-					area->butspacetype = SPACE_EMPTY;
+						/* Don't forget to unset! */
+						area->butspacetype = SPACE_EMPTY;
+					}
 				}
 			}
-		}
 
-		for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
-			for (ScrArea *area = screen->areabase.first; area; area = area->next) {
-				if (ELEM(area->butspacetype, SPACE_TIME, SPACE_LOGIC)) {
-					/* Areas that were already handled won't be handled again */
-					do_version_area_change_space_to_space_action(area, scene);
+			for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
+				for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+					if (ELEM(area->butspacetype, SPACE_TIME, SPACE_LOGIC)) {
+						/* Areas that were already handled won't be handled again */
+						do_version_area_change_space_to_space_action(area, scene);
 
-					/* Don't forget to unset! */
-					area->butspacetype = SPACE_EMPTY;
+						/* Don't forget to unset! */
+						area->butspacetype = SPACE_EMPTY;
+					}
 				}
 			}
 		}



More information about the Bf-blender-cvs mailing list