* Bugfix for crash when deleting particle system used by Smoke Flow modifier (reported by nudelZ).
This commit is contained in:
Daniel Genrich 2009-10-29 19:26:13 +00:00
parent 9a13a84f15
commit 099438f087
2 changed files with 19 additions and 8 deletions

@ -35,20 +35,21 @@
#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
#include "DNA_boid_types.h"
#include "DNA_curve_types.h"
#include "DNA_group_types.h"
#include "DNA_particle_types.h"
#include "DNA_ipo_types.h" // XXX old animation system stuff to remove!
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_force.h"
#include "DNA_texture_types.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "DNA_curve_types.h"
#include "DNA_key_types.h"
#include "DNA_ipo_types.h" // XXX old animation system stuff to remove!
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "DNA_smoke_types.h"
#include "DNA_texture_types.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@ -3308,10 +3309,20 @@ void object_remove_particle_system(Scene *scene, Object *ob)
{
ParticleSystem *psys = psys_get_current(ob);
ParticleSystemModifierData *psmd;
ModifierData *md;
if(!psys)
return;
/* clear all other appearances of this pointer (like on smoke flow modifier) */
if((md = modifiers_findByType(ob, eModifierType_Smoke)))
{
SmokeModifierData *smd = (SmokeModifierData *)md;
if((smd->type == MOD_SMOKE_TYPE_FLOW) && smd->flow && smd->flow->psys)
if(smd->flow->psys == psys)
smd->flow->psys = NULL;
}
/* clear modifier */
psmd= psys_get_modifier(ob, psys);
BLI_remlink(&ob->modifiers, psmd);

@ -823,7 +823,7 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd)
// we got nice flow object
SmokeFlowSettings *sfs = smd2->flow;
if(sfs->psys && sfs->psys->part && sfs->psys->part->type==PART_EMITTER) // is particle system selected
if(sfs && sfs->psys && sfs->psys->part && sfs->psys->part->type==PART_EMITTER) // is particle system selected
{
ParticleSystem *psys = sfs->psys;
ParticleSettings *part=psys->part;