Skip to content

Commit 1b32ade

Browse files
committed
Fix trackingFree() - do not add a not removed entry
Do not add memory back to the tracker, if it had not been removed. Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
1 parent 72cb5f7 commit 1b32ade

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

src/provider/provider_tracking.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
337337

338338
static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
339339
umf_result_t ret;
340+
umf_result_t ret_remove = UMF_RESULT_ERROR_UNKNOWN;
340341
umf_tracking_memory_provider_t *p =
341342
(umf_tracking_memory_provider_t *)hProvider;
342343

@@ -345,13 +346,13 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
345346
// could allocate the memory at address `ptr` before a call to umfMemoryTrackerRemove
346347
// resulting in inconsistent state.
347348
if (ptr) {
348-
ret = umfMemoryTrackerRemove(p->hTracker, ptr);
349-
if (ret != UMF_RESULT_SUCCESS) {
349+
ret_remove = umfMemoryTrackerRemove(p->hTracker, ptr);
350+
if (ret_remove != UMF_RESULT_SUCCESS) {
350351
// DO NOT return an error here, because the tracking provider
351352
// cannot change behaviour of the upstream provider.
352353
LOG_ERR("failed to remove the region from the tracker, ptr=%p, "
353354
"size=%zu, ret = %d",
354-
ptr, size, ret);
355+
ptr, size, ret_remove);
355356
}
356357
}
357358

@@ -371,6 +372,12 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
371372
ret = umfMemoryProviderFree(p->hUpstream, ptr, size);
372373
if (ret != UMF_RESULT_SUCCESS) {
373374
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+
374381
if (umfMemoryTrackerAdd(p->hTracker, p->pool, ptr, size) !=
375382
UMF_RESULT_SUCCESS) {
376383
LOG_ERR(

0 commit comments

Comments
 (0)