[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20194] trunk/blender/source/blender: Bugfix #18725
Ton Roosendaal
ton at blender.org
Thu May 14 11:32:48 CEST 2009
Revision: 20194
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20194
Author: ton
Date: 2009-05-14 11:32:47 +0200 (Thu, 14 May 2009)
Log Message:
-----------
Bugfix #18725
Particles using group-duplication, with Metaballs in group, enter eternal
loop in our code now. This is a non-supported case... metaball code doesn't
support recursions. Added a provision in code to catch this case, and print
an error in console to denote this.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/mball.c
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/blender/makesdna/DNA_scene_types.h
Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c 2009-05-14 07:59:44 UTC (rev 20193)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c 2009-05-14 09:32:47 UTC (rev 20194)
@@ -297,7 +297,10 @@
splitIDname(basis->id.name+2, basisname, &basisnr);
totelem= 0;
- next_object(0, 0, 0);
+ /* XXX recursion check, see scene.c, just too simple code this next_object() */
+ if(F_ERROR==next_object(0, 0, 0))
+ return NULL;
+
while(next_object(1, &base, &ob)) {
if (ob->type==OB_MBALL) {
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2009-05-14 07:59:44 UTC (rev 20193)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2009-05-14 09:32:47 UTC (rev 20194)
@@ -402,16 +402,25 @@
{
static ListBase *duplilist= NULL;
static DupliObject *dupob;
- static int fase;
+ static int fase= F_START, in_next_object= 0;
int run_again=1;
/* init */
if(val==0) {
fase= F_START;
dupob= NULL;
+
+ /* XXX particle systems with metas+dupligroups call this recursively */
+ /* see bug #18725 */
+ if(in_next_object) {
+ printf("ERROR: MetaBall generation called recursively, not supported\n");
+
+ return F_ERROR;
+ }
}
else {
-
+ in_next_object= 1;
+
/* run_again is set when a duplilist has been ended */
while(run_again) {
run_again= 0;
@@ -493,6 +502,9 @@
}
}
+ /* reset recursion test */
+ in_next_object= 0;
+
return fase;
}
Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h 2009-05-14 07:59:44 UTC (rev 20193)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h 2009-05-14 09:32:47 UTC (rev 20194)
@@ -788,6 +788,7 @@
#define PROP_RANDOM 6
/* return flag next_object function */
+#define F_ERROR -1
#define F_START 0
#define F_SCENE 1
#define F_SET 2
More information about the Bf-blender-cvs
mailing list