[Bf-blender-cvs] [87ad27ca89c] master: Sculpt: Fix memory leak in undo system

Sergey Sharybin noreply at git.blender.org
Thu Sep 20 15:38:48 CEST 2018


Commit: 87ad27ca89c3b1ce5243d6f67b42cd98ba99fd3f
Author: Sergey Sharybin
Date:   Thu Sep 20 15:38:15 2018 +0200
Branches: master
https://developer.blender.org/rB87ad27ca89c3b1ce5243d6f67b42cd98ba99fd3f

Sculpt: Fix memory leak in undo system

Was not freeing undo nodes themselves.

===================================================================

M	source/blender/editors/sculpt_paint/sculpt_undo.c

===================================================================

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;
 	}
 }



More information about the Bf-blender-cvs mailing list