|
@@ -105,9 +105,11 @@ CheckAlignment:
|
|
|
get_previous_size_availability(block_header);
|
|
|
|
|
|
if(previous_size_availability == 1) {
|
|
|
+ void *old_ptr = *memptr;
|
|
|
+
|
|
|
*memptr = dmmlib_malloc(encapsulated_rb, size + alignment - 1);
|
|
|
|
|
|
- dmmlib_free(encapsulated_rb, *memptr);
|
|
|
+ dmmlib_free(encapsulated_rb, old_ptr);
|
|
|
|
|
|
if(*memptr != NULL) {
|
|
|
goto CheckAlignment;
|
|
@@ -160,22 +162,8 @@ CheckAlignment:
|
|
|
sizeof(raw_block_header_t), BIGBLOCK);
|
|
|
if(*memptr != NULL) {
|
|
|
|
|
|
-#ifdef WITH_DEBUG
|
|
|
- LOCK_GLOBAL();
|
|
|
- LOCK_RAW_BLOCK(((raw_block_header_t *) *memptr));
|
|
|
- SLIST_INSERT_HEAD(&systemallocator.bb_head,
|
|
|
- (raw_block_header_t *) *memptr, pointers);
|
|
|
- UNLOCK_RAW_BLOCK(((raw_block_header_t *) *memptr));
|
|
|
- UNLOCK_GLOBAL();
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifdef REQUEST_SIZE_INFO
|
|
|
- UPDATE_GLOBAL_STATS(MALLOC, size);
|
|
|
-#else
|
|
|
- UPDATE_GLOBAL_STATS(MALLOC);
|
|
|
-#endif
|
|
|
-
|
|
|
- *memptr = (void *)((uintptr_t) *memptr + sizeof(raw_block_header_t));
|
|
|
+ *memptr = (void *)((uintptr_t) *memptr +
|
|
|
+ sizeof(raw_block_header_t));
|
|
|
|
|
|
if(((uintptr_t) *memptr) % alignment != 0) {
|
|
|
size_t padding = (- (size_t) *memptr) & (alignment - 1);
|
|
@@ -188,11 +176,24 @@ CheckAlignment:
|
|
|
);
|
|
|
|
|
|
munmap((void *)((uintptr_t) *memptr
|
|
|
- - sizeof(raw_block_header_t)),
|
|
|
+ - sizeof(raw_block_header_t)
|
|
|
+ - padding),
|
|
|
(size_t) padding);
|
|
|
|
|
|
*memptr = (void *)((uintptr_t) *memptr + padding);
|
|
|
}
|
|
|
+
|
|
|
+#ifdef WITH_DEBUG
|
|
|
+ LOCK_GLOBAL();
|
|
|
+ LOCK_RAW_BLOCK(((raw_block_header_t *) ((uintptr_t) *memptr -
|
|
|
+ sizeof(raw_block_header_t))));
|
|
|
+ SLIST_INSERT_HEAD(&systemallocator.bb_head,
|
|
|
+ (raw_block_header_t *) ((uintptr_t) *memptr -
|
|
|
+ sizeof(raw_block_header_t)), pointers);
|
|
|
+ UNLOCK_RAW_BLOCK(((raw_block_header_t *) *memptr));
|
|
|
+ UNLOCK_GLOBAL();
|
|
|
+#endif
|
|
|
+
|
|
|
}
|
|
|
} else {
|
|
|
raw_block = create_raw_block((size_t) SYS_ALLOC_SIZE,
|
|
@@ -215,9 +216,15 @@ CheckAlignment:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
if(*memptr != NULL) {
|
|
|
+
|
|
|
assert((uintptr_t) *memptr % alignment == 0);
|
|
|
+
|
|
|
+#ifdef REQUEST_SIZE_INFO
|
|
|
+ UPDATE_GLOBAL_STATS(MEMALIGN, size);
|
|
|
+#else
|
|
|
+ UPDATE_GLOBAL_STATS(MEMALIGN);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
MEM_TRACE("dmmlib - ma %p %zu %zu\n", *memptr, alignment, size);
|