@@ -80,6 +80,11 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
80
80
return UMF_RESULT_ERROR_UNKNOWN ;
81
81
}
82
82
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
+
83
88
umf_ba_free (hTracker -> tracker_allocator , value );
84
89
85
90
return UMF_RESULT_SUCCESS ;
@@ -332,6 +337,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
332
337
333
338
static umf_result_t trackingFree (void * hProvider , void * ptr , size_t size ) {
334
339
umf_result_t ret ;
340
+ umf_result_t ret_remove = UMF_RESULT_ERROR_UNKNOWN ;
335
341
umf_tracking_memory_provider_t * p =
336
342
(umf_tracking_memory_provider_t * )hProvider ;
337
343
@@ -340,13 +346,13 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
340
346
// could allocate the memory at address `ptr` before a call to umfMemoryTrackerRemove
341
347
// resulting in inconsistent state.
342
348
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 ) {
345
351
// DO NOT return an error here, because the tracking provider
346
352
// cannot change behaviour of the upstream provider.
347
353
LOG_ERR ("failed to remove the region from the tracker, ptr=%p, "
348
354
"size=%zu, ret = %d" ,
349
- ptr , size , ret );
355
+ ptr , size , ret_remove );
350
356
}
351
357
}
352
358
@@ -366,6 +372,12 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
366
372
ret = umfMemoryProviderFree (p -> hUpstream , ptr , size );
367
373
if (ret != UMF_RESULT_SUCCESS ) {
368
374
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
+
369
381
if (umfMemoryTrackerAdd (p -> hTracker , p -> pool , ptr , size ) !=
370
382
UMF_RESULT_SUCCESS ) {
371
383
LOG_ERR (
0 commit comments