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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-12-21 16:24:16 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-12-21 16:39:43 +0300
commit82c3fdd559b32d88881883b99cf441935401cf05 (patch)
treef17eb41e91a0d8c2362e0dcff45c46e63cf7ac7f /source/blender
parent494d13115cbbf47060eb83f64a4bd958c0d406bc (diff)
Fix T57907: Crash with hair when switching between object and edit mode
Was only visible after going in and out (with some strokes inbetween) hair edit mode. The edit structure was never freed during Blender session for some reason. Now we free those when leaving particle edit mode.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/physics/particle_edit.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index d5daaaa3812..33ed3336355 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -4810,6 +4810,21 @@ static bool particle_edit_toggle_poll(bContext *C)
modifiers_findByType(ob, eModifierType_Softbody));
}
+static void free_all_psys_edit(Object *object)
+{
+ for (ParticleSystem *psys = object->particlesystem.first;
+ psys != NULL;
+ psys = psys->next)
+ {
+ if (psys->edit != NULL) {
+ BLI_assert(psys->free_edit != NULL);
+ psys->free_edit(psys->edit);
+ psys->free_edit = NULL;
+ psys->edit = NULL;
+ }
+ }
+}
+
static int particle_edit_toggle_exec(bContext *C, wmOperator *op)
{
struct wmMsgBus *mbus = CTX_wm_message_bus(C);
@@ -4851,6 +4866,7 @@ static int particle_edit_toggle_exec(bContext *C, wmOperator *op)
else {
ob->mode &= ~mode_flag;
toggle_particle_cursor(C, 0);
+ free_all_psys_edit(ob);
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, NULL);
}