Revision: 32464
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32464
Author:   jhk
Date:     2010-10-14 11:01:03 +0200 (Thu, 14 Oct 2010)

Log Message:
-----------
Fix for [#24237] Hair dynamics with zero particles generates a segmentation 
fault

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/blenkernel/intern/pointcache.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c   2010-10-14 
08:15:10 UTC (rev 32463)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c   2010-10-14 
09:01:03 UTC (rev 32464)
@@ -402,6 +402,7 @@
                        modifier_free((ModifierData*)psys->clmd);
                        
                        psys->clmd = NULL;
+                       psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
                }
                else {
                        cloth_free_modifier(ob, psys->clmd);

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c    
2010-10-14 08:15:10 UTC (rev 32463)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c    
2010-10-14 09:01:03 UTC (rev 32464)
@@ -4016,8 +4016,13 @@
        switch(part->type) {
                case PART_HAIR:
                {
+                       /* nothing to do so bail out early */
+                       if(psys->totpart == 0 && part->totpart == 0) {
+                               psys_free_path_cache(psys, NULL);
+                               free_hair(ob, psys, 0);
+                       }
                        /* (re-)create hair */
-                       if(hair_needs_recalc(psys)) {
+                       else if(hair_needs_recalc(psys)) {
                                float hcfra=0.0f;
                                int i, recalc = psys->recalc;
 

Modified: trunk/blender/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/pointcache.c 2010-10-14 
08:15:10 UTC (rev 32463)
+++ trunk/blender/source/blender/blenkernel/intern/pointcache.c 2010-10-14 
09:01:03 UTC (rev 32464)
@@ -2993,13 +2993,17 @@
 
 void BKE_ptcache_validate(PointCache *cache, int framenr)
 {
-       cache->flag |= PTCACHE_SIMULATION_VALID;
-       cache->simframe = framenr;
+       if(cache) {
+               cache->flag |= PTCACHE_SIMULATION_VALID;
+               cache->simframe = framenr;
+       }
 }
 void BKE_ptcache_invalidate(PointCache *cache)
 {
-       cache->flag &= ~PTCACHE_SIMULATION_VALID;
-       cache->simframe = 0;
-       cache->last_exact = MIN2(cache->startframe, 0);
+       if(cache) {
+               cache->flag &= ~PTCACHE_SIMULATION_VALID;
+               cache->simframe = 0;
+               cache->last_exact = MIN2(cache->startframe, 0);
+       }
 }
 


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

Reply via email to