Revision: 25463
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25463
Author:   blendix
Date:     2009-12-18 14:08:11 +0100 (Fri, 18 Dec 2009)

Log Message:
-----------
Fix #20423: particle system deflection settings were not read correctly,
causing crashes on free and duplication.

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

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2009-12-18 
11:55:18 UTC (rev 25462)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2009-12-18 
13:08:11 UTC (rev 25463)
@@ -3070,6 +3070,12 @@
        }
 }
 
+void lib_link_partdeflect(FileData *fd, ID *id, PartDeflect *pd)
+{
+       if(pd && pd->tex)
+               pd->tex=newlibadr_us(fd, id->lib, pd->tex);
+}
+
 static void lib_link_particlesettings(FileData *fd, Main *main)
 {
        ParticleSettings *part;
@@ -3086,6 +3092,9 @@
                        part->eff_group = newlibadr(fd, part->id.lib, 
part->eff_group);
                        part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob);
 
+                       lib_link_partdeflect(fd, &part->id, part->pd);
+                       lib_link_partdeflect(fd, &part->id, part->pd2);
+
                        if(part->effector_weights)
                                part->effector_weights->group = newlibadr(fd, 
part->id.lib, part->effector_weights->group);
 
@@ -3122,12 +3131,20 @@
        }
 }
 
+static void direct_link_partdeflect(PartDeflect *pd)
+{
+       if(pd) pd->rng=NULL;
+}
+
 static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
 {
        part->adt= newdataadr(fd, part->adt);
        part->pd= newdataadr(fd, part->pd);
        part->pd2= newdataadr(fd, part->pd2);
 
+       direct_link_partdeflect(part->pd);
+       direct_link_partdeflect(part->pd2);
+
        part->effector_weights = newdataadr(fd, part->effector_weights);
        if(!part->effector_weights)
                part->effector_weights = 
BKE_add_effector_weights(part->eff_group);
@@ -3714,8 +3731,7 @@
                        
                        /* texture field */
                        if(ob->pd)
-                               if(ob->pd->tex)
-                                       ob->pd->tex=newlibadr_us(fd, 
ob->id.lib, ob->pd->tex);
+                               lib_link_partdeflect(fd, &ob->id, ob->pd);
 
                        if(ob->soft)
                                ob->soft->effector_weights->group = 
newlibadr(fd, ob->id.lib, ob->soft->effector_weights->group);
@@ -4030,8 +4046,7 @@
        }
 
        ob->pd= newdataadr(fd, ob->pd);
-       if(ob->pd)
-               ob->pd->rng=NULL;
+       direct_link_partdeflect(ob->pd);
        ob->soft= newdataadr(fd, ob->soft);
        if(ob->soft) {
                SoftBody *sb= ob->soft;         


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to