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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user