|
@@ -13,7 +13,7 @@
|
|
|
|
|
|
void *sys_alloc(allocator_t *allocator, heap_t *heap, size_t size) {
|
|
|
|
|
|
- size_t allocation_size, previous_size;
|
|
|
+ size_t allocation_size, previous_size, previous_size_availability;
|
|
|
void *ptr;
|
|
|
|
|
|
#ifdef HAVE_LOCKS
|
|
@@ -23,9 +23,11 @@ void *sys_alloc(allocator_t *allocator, heap_t *heap, size_t size) {
|
|
|
allocation_size = req_padding(size) + HEADER_SIZE;
|
|
|
|
|
|
if(allocator->border_ptr != NULL) {
|
|
|
- previous_size = get_size_availability(allocator->border_ptr);
|
|
|
+ previous_size = get_size(allocator->border_ptr);
|
|
|
+ previous_size_availability = get_size_availability(allocator->border_ptr);
|
|
|
} else {
|
|
|
previous_size = 0;
|
|
|
+ previous_size_availability = 1;
|
|
|
}
|
|
|
|
|
|
#ifndef WITH_MEMORY_SPACE_AWARENESS
|
|
@@ -34,26 +36,28 @@ void *sys_alloc(allocator_t *allocator, heap_t *heap, size_t size) {
|
|
|
printf("sbrk problem for size of: %zu\n", allocation_size);
|
|
|
printf( "Error on sbrk: %s\n", strerror( errno ) );
|
|
|
}
|
|
|
- if(allocator->border_ptr != NULL &&
|
|
|
- ptr != (void *) ((char *) allocator->border_ptr + previous_size)) {
|
|
|
+ if(allocator->border_ptr != NULL && ptr != (void *)
|
|
|
+ ((char *) allocator->border_ptr + previous_size)) {
|
|
|
printf("sbrk() does not return sequential space.\n");
|
|
|
}
|
|
|
#else
|
|
|
if(allocator->remaining_size >= allocation_size) {
|
|
|
- ptr = allocator->border_ptr;
|
|
|
+ ptr = (void *) ((char *) allocator->border_ptr + previous_size);
|
|
|
allocator->remaining_size -= allocation_size;
|
|
|
} else {
|
|
|
printf("No more free space.\n");
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- allocator->border_ptr = (char *) allocator->border_ptr + allocation_size;
|
|
|
-
|
|
|
+
|
|
|
ptr = (void *) ((char *) ptr + HEADER_SIZE);
|
|
|
+
|
|
|
+
|
|
|
+ allocator->border_ptr = ptr;
|
|
|
|
|
|
|
|
|
set_size(ptr, req_padding(size));
|
|
|
- set_previous_size(ptr, previous_size);
|
|
|
+ set_previous_size_availability(ptr, previous_size_availability);
|
|
|
|
|
|
|
|
|
heap->dmm_stats.mem_allocated += req_padding(size);
|