[Bf-blender-cvs] [b496bf022bc] master: Fix T54584: Crash w/ image undo

Campbell Barton noreply at git.blender.org
Wed Aug 8 09:10:44 CEST 2018


Commit: b496bf022bc48fd759e4848edf93d181985e31ad
Author: Campbell Barton
Date:   Wed Aug 8 17:08:53 2018 +1000
Branches: master
https://developer.blender.org/rBb496bf022bc48fd759e4848edf93d181985e31ad

Fix T54584: Crash w/ image undo

Using accumulation undo type (eg painting)
as the first undo step, broke code which adds an initial memfile undo.

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

M	source/blender/blenkernel/intern/undo_system.c

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

diff --git a/source/blender/blenkernel/intern/undo_system.c b/source/blender/blenkernel/intern/undo_system.c
index ba7d432fab3..2231f43c9c3 100644
--- a/source/blender/blenkernel/intern/undo_system.c
+++ b/source/blender/blenkernel/intern/undo_system.c
@@ -254,6 +254,7 @@ void BKE_undosys_stack_clear_active(UndoStack *ustack)
 static bool undosys_stack_push_main(UndoStack *ustack, const char *name, struct Main *bmain)
 {
 	UNDO_NESTED_ASSERT(false);
+	BLI_assert(ustack->step_init == NULL);
 	CLOG_INFO(&LOG, 1, "'%s'", name);
 	bContext *C_temp = CTX_create();
 	CTX_data_main_set(C_temp, bmain);
@@ -434,7 +435,13 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack, bContext *C, const char
 		Main *bmain = G.main;
 		if (bmain->is_memfile_undo_written == false) {
 			const char *name_internal = "MemFile Internal";
-			if (undosys_stack_push_main(ustack, name_internal, bmain)) {
+			/* Don't let 'step_init' cause issues when adding memfile undo step. */
+			void *step_init = ustack->step_init;
+			ustack->step_init = NULL;
+			const bool ok = undosys_stack_push_main(ustack, name_internal, bmain);
+			/* Restore 'step_init'. */
+			ustack->step_init = step_init;
+			if (ok) {
 				UndoStep *us = ustack->steps.last;
 				BLI_assert(STREQ(us->name, name_internal));
 				us->skip = true;



More information about the Bf-blender-cvs mailing list