|
@@ -36,8 +36,6 @@
|
|
|
/**
|
|
|
* Re-allocates a memory block from a freelist-organized raw block
|
|
|
*
|
|
|
- * FIXME Tries to re-allocate only in the same raw block.
|
|
|
- *
|
|
|
* @param raw_block The pointer of the freelist raw block.
|
|
|
* @param ptr The pointer of the memory block to be re-allocated.
|
|
|
* @param req_size The requested memory size.
|
|
@@ -51,9 +49,21 @@ void * freelist_realloc(freelist_rb_t *raw_block, void *ptr,
|
|
|
|
|
|
block = (block_header_t *)((char *) ptr - HEADER_SIZE);
|
|
|
|
|
|
+ if(get_size(block) > req_size) {
|
|
|
+ /* TODO Maybe create a memory block in the unneeded space */
|
|
|
+ return ptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* First try to allocate space from the same raw block.
|
|
|
+ * If it fails, try a more generic malloc. */
|
|
|
+
|
|
|
ret = freelist_malloc(raw_block, req_size);
|
|
|
|
|
|
if(ret == NULL) {
|
|
|
+ ret = malloc(req_size);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ret == NULL) {
|
|
|
return NULL;
|
|
|
}
|
|
|
|