summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2007-11-29 20:10:10 +0100
committerMichael Brown2007-11-29 20:10:10 +0100
commit1de705e30fe5eea7e2f5c721b53666a0fde0120c (patch)
treec9b259b1ceae2e0b8196fcb5892f0dd821a5db97
parentudp_open_promisc() calls udp_open_common() with peer==NULL. (diff)
downloadipxe-1de705e30fe5eea7e2f5c721b53666a0fde0120c.tar.gz
ipxe-1de705e30fe5eea7e2f5c721b53666a0fde0120c.tar.xz
ipxe-1de705e30fe5eea7e2f5c721b53666a0fde0120c.zip
Reallocate memory for bitmaps only when necessary.
-rw-r--r--src/core/bitmap.c16
1 files changed, 9 insertions, 7 deletions
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 ) {