"Fix" for #17636 Crashing bug - won't open a file
[blender.git] / source / blender / blenloader / intern / readfile.c
index 8865e3bb173c9500487aafbeacc28a451eb36c1c..6add88284c2d7cac8e3807335477144286945cb2 100644 (file)
@@ -2596,7 +2596,7 @@ static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
        part->pd2= newdataadr(fd, part->pd2);
 }
 
-static void lib_link_particlesystems(FileData *fd, ID *id, ListBase *particles)
+static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase *particles)
 {
        ParticleSystem *psys, *psysnext;
        int a;
@@ -2616,6 +2616,11 @@ static void lib_link_particlesystems(FileData *fd, ID *id, ListBase *particles)
                        }
                }
                else {
+                       /* particle modifier must be removed before particle system */
+                       ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys);
+                       BLI_remlink(&ob->modifiers, psmd);
+                       modifier_free((ModifierData *)psmd);
+
                        BLI_remlink(particles, psys);
                        MEM_freeN(psys);
                }
@@ -3069,7 +3074,7 @@ static void lib_link_object(FileData *fd, Main *main)
                                        ob->pd->tex=newlibadr_us(fd, ob->id.lib, ob->pd->tex);
 
                        lib_link_scriptlink(fd, &ob->id, &ob->scriptlink);
-                       lib_link_particlesystems(fd, &ob->id, &ob->particlesystem);
+                       lib_link_particlesystems(fd, ob, &ob->id, &ob->particlesystem);
                        lib_link_modifiers(fd, ob);
                }
                ob= ob->id.next;