Fix T57907: Crash with hair when switching between object and edit mode
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 21 Dec 2018 13:24:16 +0000 (14:24 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 21 Dec 2018 13:39:43 +0000 (14:39 +0100)
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.

source/blender/editors/physics/particle_edit.c

index d5daaaa381263a40aa54ccecfc2b2d810ee29a0e..33ed333635560f844fa0a7b664dbfaa1da04ec05 100644 (file)
@@ -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);
        }