Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastián Barschkis <sebbas@sebbas.org>2020-02-04 00:02:17 +0300
committerSebastián Barschkis <sebbas@sebbas.org>2020-02-04 00:04:07 +0300
commite268fe6e64dd872534944e825c0fe7483e18010a (patch)
tree87625f64f2feccf5c896250a13a1324b90991482
parent0cd0058e27025b97b1d187cf2299694c6696cb19 (diff)
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.
-rw-r--r--source/blender/blenkernel/intern/fluid.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index f19137bf796..91adbf2301d 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -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);
}
}