Fix crash in some cases when deleting particle systems.
Those 'never null' ID pointers are really a PITA to handle... luckily we don't have much of those around! Found by Sybren, thanks. Should be backported to 2.78.
This commit is contained in:
parent
a2a5ae5b54
commit
a8ed9144a3
|
@ -44,7 +44,7 @@ enum {
|
|||
* (like e.g. Object->data). */
|
||||
ID_REMAP_FLAG_NEVER_NULL_USAGE = 1 << 2,
|
||||
/* This tells the callback func to force setting IDs using target one with a 'never NULL' pointer to NULL.
|
||||
* WARNING! Use with extreme care, this will leave database in broken state! */
|
||||
* WARNING! Use with extreme care, this will leave database in broken state and can cause crashes very easily! */
|
||||
ID_REMAP_FORCE_NEVER_NULL_USAGE = 1 << 3,
|
||||
};
|
||||
|
||||
|
|
|
@ -503,7 +503,9 @@ void psys_free_particles(ParticleSystem *psys)
|
|||
PARTICLE_P;
|
||||
|
||||
if (psys->particles) {
|
||||
if (psys->part->type == PART_HAIR) {
|
||||
/* Even though psys->part should never be NULL, this can happen as an exception during deletion.
|
||||
* See ID_REMAP_SKIP/FORCE/FLAG_NEVER_NULL_USAGE in BKE_library_remap. */
|
||||
if (psys->part && psys->part->type == PART_HAIR) {
|
||||
LOOP_PARTICLES {
|
||||
if (pa->hair)
|
||||
MEM_freeN(pa->hair);
|
||||
|
|
|
@ -4336,7 +4336,9 @@ void BKE_particlesystem_id_loop(ParticleSystem *psys, ParticleSystemIDFunc func,
|
|||
func(psys, (ID **)&pt->ob, userdata, IDWALK_NOP);
|
||||
}
|
||||
|
||||
if (psys->part->phystype == PART_PHYS_BOIDS) {
|
||||
/* Even though psys->part should never be NULL, this can happen as an exception during deletion.
|
||||
* See ID_REMAP_SKIP/FORCE/FLAG_NEVER_NULL_USAGE in BKE_library_remap. */
|
||||
if (psys->part && psys->part->phystype == PART_PHYS_BOIDS) {
|
||||
ParticleData *pa;
|
||||
int p;
|
||||
|
||||
|
|
Loading…
Reference in New Issue