[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