Fix T73537: Particle system Crash

Added sanity check in the flow / obstacle object loops that check if the modifier data is valid. Ideally this should not be needed. However, in remove_particle_systems_from_object() the fluid modifier can get freed. It is not yet clear whether the modifier free call is really needed or not.
This commit is contained in:
2020-02-03 22:02:17 +01:00
parent 0cd0058e27
commit e268fe6e64

View File

@@ -872,6 +872,11 @@ static void update_obstacleflags(FluidDomainSettings *mds,
FluidModifierData *mmd2 = (FluidModifierData *)modifiers_findByType(coll_ob,
eModifierType_Fluid);
/* Sanity check. */
if (!mmd2) {
continue;
}
if ((mmd2->type & MOD_FLUID_TYPE_EFFEC) && mmd2->effector) {
FluidEffectorSettings *mes = mmd2->effector;
if (!mes) {
@@ -959,6 +964,11 @@ static void update_obstacles(Depsgraph *depsgraph,
FluidModifierData *mmd2 = (FluidModifierData *)modifiers_findByType(coll_ob,
eModifierType_Fluid);
/* Sanity check. */
if (!mmd2) {
continue;
}
/* TODO (sebbas): check if modifier is active? */
if ((mmd2->type & MOD_FLUID_TYPE_EFFEC) && mmd2->effector) {
FluidEffectorSettings *mes = mmd2->effector;
@@ -2298,7 +2308,7 @@ static void update_flowsflags(FluidDomainSettings *mds, Object **flowobjs, int n
FluidModifierData *mmd2 = (FluidModifierData *)modifiers_findByType(coll_ob,
eModifierType_Fluid);
// Sanity check
/* Sanity check. */
if (!mmd2) {
continue;
}
@@ -2411,6 +2421,11 @@ static void update_flowsfluids(struct Depsgraph *depsgraph,
FluidModifierData *mmd2 = (FluidModifierData *)modifiers_findByType(flowobj,
eModifierType_Fluid);
/* Sanity check. */
if (!mmd2) {
continue;
}
/* Check for initialized smoke object. */
if ((mmd2->type & MOD_FLUID_TYPE_FLOW) && mmd2->flow) {
FluidFlowSettings *mfs = mmd2->flow;
@@ -2607,6 +2622,11 @@ static void update_flowsfluids(struct Depsgraph *depsgraph,
FluidModifierData *mmd2 = (FluidModifierData *)modifiers_findByType(flowobj,
eModifierType_Fluid);
/* Sanity check. */
if (!mmd2) {
continue;
}
/* Check for initialized flow object. */
if ((mmd2->type & MOD_FLUID_TYPE_FLOW) && mmd2->flow) {
FluidFlowSettings *mfs = mmd2->flow;
@@ -3313,7 +3333,7 @@ static void BKE_fluid_modifier_processDomain(FluidModifierData *mmd,
guide_parent = mds->guide_parent;
if (guide_parent) {
mmd_parent = (FluidModifierData *)modifiers_findByType(guide_parent, eModifierType_Fluid);
if (mmd_parent->domain) {
if (mmd_parent && mmd_parent->domain) {
copy_v3_v3_int(mds->guide_res, mmd_parent->domain->res);
}
}