[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32464] trunk/blender/source/blender/ blenkernel/intern: Fix for [#24237] Hair dynamics with zero particles generates a segmentation fault

Janne Karhu jhkarh at gmail.com
Thu Oct 14 11:01:03 CEST 2010


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);
+	}
 }
 





More information about the Bf-blender-cvs mailing list