@@ -37,7 +37,7 @@ struct umf_memory_tracker_t {
3737 // when one memory pool acts as a memory provider
3838 // for another memory pool (nested memory pooling).
3939 critnib * alloc_segments_map [MAX_LEVELS_OF_ALLOC_SEGMENT_MAP ];
40- utils_mutex_t mutex ;
40+ utils_mutex_t splitMergeMutex ;
4141};
4242
4343typedef struct tracker_alloc_info_t {
@@ -179,11 +179,6 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
179179 int level = 0 ;
180180 int found = 0 ;
181181
182- int ret = utils_mutex_lock (& hTracker -> mutex );
183- if (ret ) {
184- return UMF_RESULT_ERROR_UNKNOWN ;
185- }
186-
187182 // Find the most nested (in the highest level) entry
188183 // in the critnib maps that contains the given 'ptr' pointer.
189184 do {
@@ -202,8 +197,7 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
202197 // TODO: we need to support an arbitrary amount of layers in the future
203198 LOG_ERR ("tracker level is too high, ptr=%p, size=%zu" , ptr ,
204199 size );
205- umf_result = UMF_RESULT_ERROR_OUT_OF_RESOURCES ;
206- goto err_unlock ;
200+ return UMF_RESULT_ERROR_OUT_OF_RESOURCES ;
207201 }
208202 if (((uintptr_t )ptr + size ) > (rkey + rsize )) {
209203 LOG_ERR (
@@ -212,8 +206,7 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
212206 "that exceeds the parent value (pool=%p, ptr=%p, size=%zu)" ,
213207 (void * )pool , ptr , size , (void * )rvalue -> pool , (void * )rkey ,
214208 (size_t )rsize );
215- umf_result = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
216- goto err_unlock ;
209+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
217210 }
218211 parent_key = rkey ;
219212 parent_value = rvalue ;
@@ -224,15 +217,10 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
224217 umf_result = umfMemoryTrackerAddAtLevel (hTracker , level , pool , ptr , size ,
225218 parent_key , parent_value );
226219 if (umf_result != UMF_RESULT_SUCCESS ) {
227- goto err_unlock ;
220+ return umf_result ;
228221 }
229222
230- umf_result = UMF_RESULT_SUCCESS ;
231-
232- err_unlock :
233- utils_mutex_unlock (& hTracker -> mutex );
234-
235- return umf_result ;
223+ return UMF_RESULT_SUCCESS ;
236224}
237225
238226static umf_result_t umfMemoryTrackerRemove (umf_memory_tracker_handle_t hTracker ,
@@ -244,23 +232,17 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
244232 // Every umfMemoryTrackerAdd(..., ptr, ...) should have a corresponding
245233 // umfMemoryTrackerRemove call with the same ptr value.
246234
247- umf_result_t umf_result = UMF_RESULT_ERROR_UNKNOWN ;
248235 tracker_alloc_info_t * parent_value = NULL ;
249236 uintptr_t parent_key = 0 ;
250237 int level = 0 ;
251238
252- int ret = utils_mutex_lock (& hTracker -> mutex );
253- if (ret ) {
254- return UMF_RESULT_ERROR_UNKNOWN ;
255- }
256-
257239 // Find the most nested (on the highest level) entry in the map
258240 // with the `ptr` key and with no children - only such entry can be removed.
259241 tracker_alloc_info_t * value = get_most_nested_alloc_segment (
260242 hTracker , ptr , & level , & parent_key , & parent_value , 1 /* no_children */ );
261243 if (!value ) {
262244 LOG_ERR ("pointer %p not found in the alloc_segments_map" , ptr );
263- goto err_unlock ;
245+ return UMF_RESULT_ERROR_UNKNOWN ;
264246 }
265247
266248 assert (level < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP );
@@ -282,12 +264,7 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
282264
283265 umf_ba_free (hTracker -> alloc_info_allocator , value );
284266
285- umf_result = UMF_RESULT_SUCCESS ;
286-
287- err_unlock :
288- utils_mutex_unlock (& hTracker -> mutex );
289-
290- return umf_result ;
267+ return UMF_RESULT_SUCCESS ;
291268}
292269
293270umf_memory_pool_handle_t umfMemoryTrackerGetPool (const void * ptr ) {
@@ -427,7 +404,7 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
427404 splitValue -> size = firstSize ;
428405 splitValue -> n_children = 0 ;
429406
430- int r = utils_mutex_lock (& provider -> hTracker -> mutex );
407+ int r = utils_mutex_lock (& provider -> hTracker -> splitMergeMutex );
431408 if (r ) {
432409 goto err_lock ;
433410 }
@@ -493,7 +470,7 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
493470
494471 // free the original value
495472 umf_ba_free (provider -> hTracker -> alloc_info_allocator , value );
496- utils_mutex_unlock (& provider -> hTracker -> mutex );
473+ utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
497474
498475 LOG_DEBUG (
499476 "split memory region (level=%i): ptr=%p, totalSize=%zu, firstSize=%zu" ,
@@ -502,7 +479,7 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
502479 return UMF_RESULT_SUCCESS ;
503480
504481err :
505- utils_mutex_unlock (& provider -> hTracker -> mutex );
482+ utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
506483err_lock :
507484 umf_ba_free (provider -> hTracker -> alloc_info_allocator , splitValue );
508485
@@ -534,7 +511,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
534511 int lowLevel = -2 ;
535512 int highLevel = -1 ;
536513
537- int r = utils_mutex_lock (& provider -> hTracker -> mutex );
514+ int r = utils_mutex_lock (& provider -> hTracker -> splitMergeMutex );
538515 if (r ) {
539516 goto err_lock ;
540517 }
@@ -601,7 +578,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
601578
602579 umf_ba_free (provider -> hTracker -> alloc_info_allocator , erasedhighValue );
603580
604- utils_mutex_unlock (& provider -> hTracker -> mutex );
581+ utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
605582
606583 LOG_DEBUG ("merged memory regions (level=%i): lowPtr=%p (child=%zu), "
607584 "highPtr=%p (child=%zu), totalSize=%zu" ,
@@ -616,7 +593,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
616593 assert (0 );
617594
618595not_merged :
619- utils_mutex_unlock (& provider -> hTracker -> mutex );
596+ utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
620597
621598err_lock :
622599 umf_ba_free (provider -> hTracker -> alloc_info_allocator , mergedValue );
@@ -1100,7 +1077,7 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11001077
11011078 handle -> alloc_info_allocator = alloc_info_allocator ;
11021079
1103- void * mutex_ptr = utils_mutex_init (& handle -> mutex );
1080+ void * mutex_ptr = utils_mutex_init (& handle -> splitMergeMutex );
11041081 if (!mutex_ptr ) {
11051082 goto err_destroy_alloc_info_allocator ;
11061083 }
@@ -1124,7 +1101,7 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11241101 critnib_delete (handle -> alloc_segments_map [j ]);
11251102 }
11261103 }
1127- utils_mutex_destroy_not_free (& handle -> mutex );
1104+ utils_mutex_destroy_not_free (& handle -> splitMergeMutex );
11281105err_destroy_alloc_info_allocator :
11291106 umf_ba_destroy (alloc_info_allocator );
11301107err_free_handle :
@@ -1157,7 +1134,7 @@ void umfMemoryTrackerDestroy(umf_memory_tracker_handle_t handle) {
11571134 handle -> alloc_segments_map [i ] = NULL ;
11581135 }
11591136 }
1160- utils_mutex_destroy_not_free (& handle -> mutex );
1137+ utils_mutex_destroy_not_free (& handle -> splitMergeMutex );
11611138 umf_ba_destroy (handle -> alloc_info_allocator );
11621139 handle -> alloc_info_allocator = NULL ;
11631140 umf_ba_global_free (handle );
0 commit comments