@@ -80,6 +80,11 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
8080 return UMF_RESULT_ERROR_UNKNOWN ;
8181 }
8282
83+ tracker_value_t * v = value ;
84+
85+ LOG_DEBUG ("memory region removed: tracker=%p, ptr=%p, size=%zu" ,
86+ (void * )hTracker , ptr , v -> size );
87+
8388 umf_ba_free (hTracker -> tracker_allocator , value );
8489
8590 return UMF_RESULT_SUCCESS ;
@@ -332,6 +337,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
332337
333338static umf_result_t trackingFree (void * hProvider , void * ptr , size_t size ) {
334339 umf_result_t ret ;
340+ umf_result_t ret_remove = UMF_RESULT_ERROR_UNKNOWN ;
335341 umf_tracking_memory_provider_t * p =
336342 (umf_tracking_memory_provider_t * )hProvider ;
337343
@@ -340,13 +346,13 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
340346 // could allocate the memory at address `ptr` before a call to umfMemoryTrackerRemove
341347 // resulting in inconsistent state.
342348 if (ptr ) {
343- ret = umfMemoryTrackerRemove (p -> hTracker , ptr );
344- if (ret != UMF_RESULT_SUCCESS ) {
349+ ret_remove = umfMemoryTrackerRemove (p -> hTracker , ptr );
350+ if (ret_remove != UMF_RESULT_SUCCESS ) {
345351 // DO NOT return an error here, because the tracking provider
346352 // cannot change behaviour of the upstream provider.
347353 LOG_ERR ("failed to remove the region from the tracker, ptr=%p, "
348354 "size=%zu, ret = %d" ,
349- ptr , size , ret );
355+ ptr , size , ret_remove );
350356 }
351357 }
352358
@@ -366,6 +372,12 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
366372 ret = umfMemoryProviderFree (p -> hUpstream , ptr , size );
367373 if (ret != UMF_RESULT_SUCCESS ) {
368374 LOG_ERR ("upstream provider is failed to free the memory" );
375+ // Do not add memory back to the tracker,
376+ // if it had not been removed.
377+ if (ret_remove != UMF_RESULT_SUCCESS ) {
378+ return ret ;
379+ }
380+
369381 if (umfMemoryTrackerAdd (p -> hTracker , p -> pool , ptr , size ) !=
370382 UMF_RESULT_SUCCESS ) {
371383 LOG_ERR (
0 commit comments