From 1de705e30fe5eea7e2f5c721b53666a0fde0120c Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 29 Nov 2007 19:10:10 +0000 Subject: Reallocate memory for bitmaps only when necessary. --- src/core/bitmap.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src/core/bitmap.c') diff --git a/src/core/bitmap.c b/src/core/bitmap.c index fb5de89a..d0266471 100644 --- a/src/core/bitmap.c +++ b/src/core/bitmap.c @@ -41,14 +41,16 @@ int bitmap_resize ( struct bitmap *bitmap, unsigned int new_length ) { old_num_blocks = BITMAP_INDEX ( bitmap->length + BITMAP_BLKSIZE - 1 ); new_num_blocks = BITMAP_INDEX ( new_length + BITMAP_BLKSIZE - 1 ); - new_size = ( new_num_blocks * sizeof ( bitmap->blocks[0] ) ); - new_blocks = realloc ( bitmap->blocks, new_size ); - if ( ! new_blocks ) { - DBGC ( bitmap, "Bitmap %p could not resize to %d bits\n", - bitmap, new_length ); - return -ENOMEM; + if ( old_num_blocks != new_num_blocks ) { + new_size = ( new_num_blocks * sizeof ( bitmap->blocks[0] ) ); + new_blocks = realloc ( bitmap->blocks, new_size ); + if ( ! new_blocks ) { + DBGC ( bitmap, "Bitmap %p could not resize to %d " + "bits\n", bitmap, new_length ); + return -ENOMEM; + } + bitmap->blocks = new_blocks; } - bitmap->blocks = new_blocks; bitmap->length = new_length; while ( old_num_blocks < new_num_blocks ) { -- cgit v1.2.3-55-g7522