|
@@ -51,19 +51,26 @@ void * malloc(size_t size) {
|
|
|
/* Try to find a raw block available for allocation */
|
|
|
|
|
|
SLIST_FOREACH(raw_block, &systemallocator.rb_head, pointers) {
|
|
|
- LOCK_RAW_BLOCK(raw_block);
|
|
|
- encapsulated_rb = (DEFAULT_RB_T *)
|
|
|
- ((uintptr_t) raw_block + sizeof(raw_block_header_t));
|
|
|
- ptr = dmmlib_malloc(encapsulated_rb, size);
|
|
|
- UNLOCK_RAW_BLOCK(raw_block);
|
|
|
-
|
|
|
- if(ptr != NULL) {
|
|
|
- /* Check that a valid pointer has been returned */
|
|
|
- assert(((uintptr_t) raw_block < (uintptr_t) ptr) &&
|
|
|
- ((uintptr_t) ptr < (uintptr_t) raw_block +
|
|
|
- raw_block->size + sizeof(raw_block_header_t)));
|
|
|
- break;
|
|
|
+#ifdef TRYLOCK_ON_MALLOC
|
|
|
+ if(TRYLOCK_RAW_BLOCK(raw_block) == 0) {
|
|
|
+#else /* TRYLOCK_ON_MALLOC */
|
|
|
+ LOCK_RAW_BLOCK(raw_block);
|
|
|
+#endif /* TRYLOCK_ON_MALLOC */
|
|
|
+ encapsulated_rb = (DEFAULT_RB_T *)
|
|
|
+ ((uintptr_t) raw_block + sizeof(raw_block_header_t));
|
|
|
+ ptr = dmmlib_malloc(encapsulated_rb, size);
|
|
|
+ UNLOCK_RAW_BLOCK(raw_block);
|
|
|
+
|
|
|
+ if(ptr != NULL) {
|
|
|
+ /* Check that a valid pointer has been returned */
|
|
|
+ assert(((uintptr_t) raw_block < (uintptr_t) ptr) &&
|
|
|
+ ((uintptr_t) ptr < (uintptr_t) raw_block +
|
|
|
+ raw_block->size + sizeof(raw_block_header_t)));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+#ifdef TRYLOCK_ON_MALLOC
|
|
|
}
|
|
|
+#endif /* TRYLOCK_ON_MALLOC */
|
|
|
}
|
|
|
|
|
|
if(ptr == NULL) {
|