[Bf-blender-cvs] [7f7e51161f6] blender2.8: Fix T56079: crash with startup.blend saved in sculpt/paint modes.

Brecht Van Lommel noreply at git.blender.org
Tue Jul 24 12:48:09 CEST 2018


Commit: 7f7e51161f65c371d0f0c6c39bd32cbea45694cd
Author: Brecht Van Lommel
Date:   Tue Jul 24 12:43:21 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB7f7e51161f65c371d0f0c6c39bd32cbea45694cd

Fix T56079: crash with startup.blend saved in sculpt/paint modes.

This reverts commit 81a93df6d22c2f148667b9a6e8308e083a4cec39, it is not safe
to handle initialization for startup.blend differently. Instead fix the root
issue of the preview icon data structures not being initialized in time.

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

M	source/blender/editors/include/UI_interface_icons.h
M	source/blender/editors/interface/interface_icons.c
M	source/blender/editors/interface/resources.c
M	source/blender/windowmanager/intern/wm_files.c
M	source/blender/windowmanager/intern/wm_init_exit.c

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

diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h
index 651081c46bb..a34c4938b86 100644
--- a/source/blender/editors/include/UI_interface_icons.h
+++ b/source/blender/editors/include/UI_interface_icons.h
@@ -59,7 +59,7 @@ typedef struct IconFile {
 /*
  * Resizable Icons for Blender
  */
-void UI_icons_init(int first_dyn_id);
+void UI_icons_init(void);
 int UI_icon_get_width(int icon_id);
 int UI_icon_get_height(int icon_id);
 
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 22b82898288..7255640bedc 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -934,9 +934,8 @@ int UI_icon_get_height(int icon_id)
 	return 0;
 }
 
-void UI_icons_init(int first_dyn_id)
+void UI_icons_init()
 {
-	BKE_icons_init(first_dyn_id);
 #ifndef WITH_HEADLESS
 	init_iconfile_list(&iconfilelist);
 	init_internal_icons();
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 47d664eaeb2..3cb8a277e9a 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -83,7 +83,7 @@ static struct bThemeState g_theme_state = {
 
 void ui_resources_init(void)
 {
-	UI_icons_init(BIFICONID_LAST);
+	UI_icons_init();
 }
 
 void ui_resources_free(void)
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 02c24aac60e..042bd8823c4 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -492,13 +492,7 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
 
 	Main *bmain = CTX_data_main(C);
 	DEG_on_visible_update(bmain, true);
-
-	if (!is_startup_file) {
-		/* When starting up, the UI hasn't been fully initialised yet, and
-		 * this call can trigger icon updates, causing a segfault due to a
-		 * not-yet-initialised ghash for the icons. */
-		wm_event_do_depsgraph(C);
-	}
+	wm_event_do_depsgraph(C);
 
 	ED_editors_init(C);
 
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index c51d4c5534a..4b0d751a7ce 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -115,6 +115,7 @@
 #include "ED_undo.h"
 
 #include "UI_interface.h"
+#include "UI_resources.h"
 #include "BLF_api.h"
 #include "BLT_lang.h"
 
@@ -237,6 +238,11 @@ void WM_init(bContext *C, int argc, const char **argv)
 	BLF_init();
 	BLT_lang_init();
 
+	/* Init icons before reading .blend files for preview icons, which can
+	 * get triggered by the depsgraph. This is also done in background mode
+	 * for scripts that do background processing with preview icons. */
+	BKE_icons_init(BIFICONID_LAST);
+
 	/* reports cant be initialized before the wm,
 	 * but keep before file reading, since that may report errors */
 	wm_init_reports(C);
@@ -259,13 +265,6 @@ void WM_init(bContext *C, int argc, const char **argv)
 		UI_init();
 		BKE_studiolight_init();
 	}
-	else {
-		/* Note: Currently only inits icons, which we now want in background mode too
-		 * (scripts could use those in background processing...).
-		 * In case we do more later, we may need to pass a 'background' flag.
-		 * Called from 'UI_init' above */
-		BKE_icons_init(1);
-	}
 
 	ED_spacemacros_init();



More information about the Bf-blender-cvs mailing list