[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