[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55051] trunk/blender/source/blender: Bug fix #34534

Ton Roosendaal ton at blender.org
Tue Mar 5 12:19:22 CET 2013


Revision: 55051
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55051
Author:   ton
Date:     2013-03-05 11:19:21 +0000 (Tue, 05 Mar 2013)
Log Message:
-----------
Bug fix #34534

Fix for 2.66a

The new Copy/Paste objects feature could hang in eternal loop.
Only happens for objects that refer to another scene via linkage.

This fix then crashed Blender, needed to add a NULL check for screens.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/blender.c
    trunk/blender/source/blender/blenloader/intern/writefile.c

Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c	2013-03-05 09:38:50 UTC (rev 55050)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c	2013-03-05 11:19:21 UTC (rev 55051)
@@ -899,7 +899,9 @@
 {
 	if (vid) {
 		ID *id = vid;
-		id->flag |= LIB_NEED_EXPAND | LIB_DOIT;
+		/* only tag for need-expand if not done, prevents eternal loops */
+		if ((id->flag & LIB_DOIT) == 0)
+			id->flag |= LIB_NEED_EXPAND | LIB_DOIT;
 	}
 }
 

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2013-03-05 09:38:50 UTC (rev 55050)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2013-03-05 11:19:21 UTC (rev 55051)
@@ -798,14 +798,15 @@
 static void write_renderinfo(WriteData *wd, Main *mainvar)
 {
 	bScreen *curscreen;
-	Scene *sce;
+	Scene *sce, *curscene = NULL;
 	RenderInfo data;
 
 	/* XXX in future, handle multiple windows with multiple screens? */
 	current_screen_compat(mainvar, &curscreen);
-
+	if (curscreen) curscene = curscreen->scene;
+	
 	for (sce= mainvar->scene.first; sce; sce= sce->id.next) {
-		if (sce->id.lib == NULL && (sce == curscreen->scene || (sce->r.scemode & R_BG_RENDER))) {
+		if (sce->id.lib == NULL && (sce == curscene || (sce->r.scemode & R_BG_RENDER))) {
 			data.sfra = sce->r.sfra;
 			data.efra = sce->r.efra;
 			memset(data.scene_name, 0, sizeof(data.scene_name));




More information about the Bf-blender-cvs mailing list