@@ -81,6 +81,7 @@ static tracker_alloc_info_t *get_most_nested_alloc_segment(
81
81
uintptr_t parent_key = 0 ;
82
82
uintptr_t rkey = 0 ;
83
83
uint64_t rsize = 0 ;
84
+ size_t n_children = 0 ;
84
85
int level = 0 ;
85
86
int found = 0 ;
86
87
@@ -113,8 +114,8 @@ static tracker_alloc_info_t *get_most_nested_alloc_segment(
113
114
}
114
115
115
116
utils_atomic_load_acquire_u64 ((uint64_t * )& rvalue -> size , & rsize );
116
-
117
- if (found && ((uintptr_t )ptr < rkey + rsize ) && rvalue -> n_children ) {
117
+ utils_atomic_load_acquire_size_t ( & rvalue -> n_children , & n_children );
118
+ if (found && ((uintptr_t )ptr < rkey + rsize ) && n_children ) {
118
119
if (level == MAX_LEVELS_OF_ALLOC_SEGMENT_MAP - 1 ) {
119
120
break ;
120
121
}
@@ -146,13 +147,13 @@ static tracker_alloc_info_t *get_most_nested_alloc_segment(
146
147
ref_value = NULL ;
147
148
}
148
149
}
149
- } while (found && ((uintptr_t )ptr < rkey + rsize ) && rvalue -> n_children );
150
+ } while (found && ((uintptr_t )ptr < rkey + rsize ) && n_children );
150
151
151
152
if (!rvalue || rkey != (uintptr_t )ptr ) {
152
153
return NULL ;
153
154
}
154
155
155
- if (no_children && (rvalue -> n_children > 0 )) {
156
+ if (no_children && (n_children > 0 )) {
156
157
return NULL ;
157
158
}
158
159
@@ -207,11 +208,12 @@ umfMemoryTrackerAddAtLevel(umf_memory_tracker_handle_t hTracker, int level,
207
208
(void * )hTracker , level , (void * )pool , ptr , size );
208
209
209
210
if (parent_value ) {
210
- parent_value -> n_children ++ ;
211
+ size_t n_children =
212
+ utils_atomic_increment_size_t (& parent_value -> n_children ) + 1 ;
211
213
LOG_DEBUG (
212
214
"child #%zu added to memory region: tracker=%p, level=%i, "
213
215
"pool=%p, ptr=%p, size=%zu" ,
214
- parent_value -> n_children , (void * )hTracker , level - 1 ,
216
+ n_children , (void * )hTracker , level - 1 ,
215
217
(void * )parent_value -> pool , (void * )parent_key ,
216
218
parent_value -> size );
217
219
assert (ref_parent_value );
@@ -243,6 +245,7 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
243
245
uintptr_t parent_key = 0 ;
244
246
uintptr_t rkey = 0 ;
245
247
uint64_t rsize = 0 ;
248
+ size_t n_children = 0 ;
246
249
int level = 0 ;
247
250
int found = 0 ;
248
251
@@ -311,7 +314,8 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
311
314
ref_parent_value = ref_value ;
312
315
level ++ ;
313
316
}
314
- } while (found && ((uintptr_t )ptr < rkey + rsize ) && rvalue -> n_children );
317
+ utils_atomic_load_acquire_size_t (& rvalue -> n_children , & n_children );
318
+ } while (found && ((uintptr_t )ptr < rkey + rsize ) && n_children );
315
319
316
320
if (ref_value && ref_value != ref_parent_value ) {
317
321
critnib_release (hTracker -> alloc_segments_map [level ], ref_value );
@@ -366,12 +370,14 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
366
370
critnib_release (hTracker -> alloc_segments_map [level ], ref_value );
367
371
368
372
if (parent_value ) {
373
+ size_t n_children =
374
+ utils_atomic_decrement_size_t (& parent_value -> n_children );
369
375
LOG_DEBUG (
370
376
"child #%zu removed from memory region: tracker=%p, level=%i, "
371
377
"pool=%p, ptr=%p, size=%zu" ,
372
- parent_value -> n_children , (void * )hTracker , level - 1 ,
373
- (void * )parent_value -> pool , ( void * ) parent_key , parent_value -> size );
374
- parent_value -> n_children -- ;
378
+ n_children , (void * )hTracker , level - 1 , ( void * ) parent_value -> pool ,
379
+ (void * )parent_key , parent_value -> size );
380
+
375
381
assert (ref_parent_value );
376
382
assert (level >= 1 );
377
383
// release the ref_parent_value got from get_most_nested_alloc_segment()
@@ -485,6 +491,7 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
485
491
uintptr_t top_most_key = 0 ;
486
492
uintptr_t rkey = 0 ;
487
493
uint64_t rsize = 0 ;
494
+ size_t n_children = 0 ;
488
495
int level = 0 ;
489
496
int found = 0 ;
490
497
@@ -519,7 +526,7 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
519
526
}
520
527
521
528
utils_atomic_load_acquire_u64 ((uint64_t * )& rvalue -> size , & rsize );
522
-
529
+ utils_atomic_load_acquire_size_t ( & rvalue -> n_children , & n_children );
523
530
if (found && (uintptr_t )ptr < rkey + rsize ) {
524
531
top_most_key = rkey ;
525
532
top_most_value = rvalue ;
@@ -530,13 +537,13 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
530
537
}
531
538
ref_top_most_value = ref_value ;
532
539
ref_level = level ;
533
- if (rvalue -> n_children == 0 ||
540
+ if (n_children == 0 ||
534
541
level == MAX_LEVELS_OF_ALLOC_SEGMENT_MAP - 1 ) {
535
542
break ;
536
543
}
537
544
level ++ ;
538
545
}
539
- } while (found && (uintptr_t )ptr < rkey + rsize && rvalue -> n_children );
546
+ } while (found && (uintptr_t )ptr < rkey + rsize && n_children );
540
547
541
548
if (!top_most_value ) {
542
549
if (ref_value ) {
0 commit comments