Skip to content

Commit f980b46

Browse files
committed
Revert "Add lock to umfMemoryTrackerAdd() and umfMemoryTrackerRemove()"
This reverts commit 33d8b73.
1 parent e3fdd5b commit f980b46

File tree

1 file changed

+16
-39
lines changed

1 file changed

+16
-39
lines changed

src/provider/provider_tracking.c

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4343
typedef 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

238226
static 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

293270
umf_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

504481
err:
505-
utils_mutex_unlock(&provider->hTracker->mutex);
482+
utils_mutex_unlock(&provider->hTracker->splitMergeMutex);
506483
err_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

618595
not_merged:
619-
utils_mutex_unlock(&provider->hTracker->mutex);
596+
utils_mutex_unlock(&provider->hTracker->splitMergeMutex);
620597

621598
err_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);
11281105
err_destroy_alloc_info_allocator:
11291106
umf_ba_destroy(alloc_info_allocator);
11301107
err_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

Comments
 (0)