[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51492] trunk/blender/source/blender/ blenlib/intern/BLI_heap.c: fix for own error in BLI_heap_new_ex() when zero size is passed.

Campbell Barton ideasman42 at gmail.com
Mon Oct 22 09:57:24 CEST 2012


Revision: 51492
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51492
Author:   campbellbarton
Date:     2012-10-22 07:57:21 +0000 (Mon, 22 Oct 2012)
Log Message:
-----------
fix for own error in BLI_heap_new_ex() when zero size is passed.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/intern/BLI_heap.c

Modified: trunk/blender/source/blender/blenlib/intern/BLI_heap.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/BLI_heap.c	2012-10-22 07:29:38 UTC (rev 51491)
+++ trunk/blender/source/blender/blenlib/intern/BLI_heap.c	2012-10-22 07:57:21 UTC (rev 51492)
@@ -122,8 +122,8 @@
 Heap *BLI_heap_new_ex(unsigned int tot_reserve)
 {
 	Heap *heap = (Heap *)MEM_callocN(sizeof(Heap), __func__);
-	heap->bufsize = tot_reserve;
-	heap->tree = (HeapNode **)MEM_mallocN(tot_reserve * sizeof(HeapNode *), "BLIHeapTree");
+	heap->bufsize = MAX2(1, tot_reserve);
+	heap->tree = (HeapNode **)MEM_mallocN(heap->bufsize * sizeof(HeapNode *), "BLIHeapTree");
 	heap->arena = BLI_memarena_new(1 << 16, "heap arena");
 
 	return heap;
@@ -152,23 +152,17 @@
 	HeapNode *node;
 
 	if ((heap->size + 1) > heap->bufsize) {
-		unsigned int newsize = heap->bufsize * 2;
-		HeapNode **newtree;
-
-		newtree = (HeapNode **)MEM_mallocN(newsize * sizeof(*newtree), __func__);
-		memcpy(newtree, heap->tree, sizeof(HeapNode *) * heap->size);
-		MEM_freeN(heap->tree);
-
-		heap->tree = newtree;
-		heap->bufsize = newsize;
+		heap->bufsize = heap->bufsize * 2;
+		heap->tree = MEM_reallocN(heap->tree, heap->bufsize * sizeof(*heap->tree));
 	}
 
 	if (heap->freenodes) {
 		node = heap->freenodes;
 		heap->freenodes = (HeapNode *)(((HeapNode *)heap->freenodes)->ptr);
 	}
-	else
+	else {
 		node = (HeapNode *)BLI_memarena_alloc(heap->arena, sizeof *node);
+	}
 
 	node->value = value;
 	node->ptr = ptr;




More information about the Bf-blender-cvs mailing list