diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-20 16:38:15 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-20 16:38:15 +0300 |
commit | 87ad27ca89c3b1ce5243d6f67b42cd98ba99fd3f (patch) | |
tree | c689cd6762e4be4b3690a67c75ce92a4f410f197 /source/blender/editors | |
parent | 1cc9022eb51b73abc84d79366a9cf54a561c7520 (diff) |
Sculpt: Fix memory leak in undo system
Was not freeing undo nodes themselves.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_undo.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index bf5ddeb71ff..62e548f661c 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -589,10 +589,9 @@ static void sculpt_undo_restore_list(bContext *C, ListBase *lb) static void sculpt_undo_free_list(ListBase *lb) { - SculptUndoNode *unode; - int i; - - for (unode = lb->first; unode; unode = unode->next) { + SculptUndoNode *unode = lb->first; + while (unode != NULL) { + SculptUndoNode *unode_next = unode->next; if (unode->co) MEM_freeN(unode->co); if (unode->no) @@ -606,7 +605,7 @@ static void sculpt_undo_free_list(ListBase *lb) if (unode->vert_hidden) MEM_freeN(unode->vert_hidden); if (unode->grid_hidden) { - for (i = 0; i < unode->totgrid; i++) { + for (int i = 0; i < unode->totgrid; i++) { if (unode->grid_hidden[i]) MEM_freeN(unode->grid_hidden[i]); } @@ -627,6 +626,10 @@ static void sculpt_undo_free_list(ListBase *lb) CustomData_free(&unode->bm_enter_ldata, unode->bm_enter_totloop); if (unode->bm_enter_totpoly) CustomData_free(&unode->bm_enter_pdata, unode->bm_enter_totpoly); + + MEM_freeN(unode); + + unode = unode_next; } } |