@@ -84,9 +84,9 @@ static tracker_alloc_info_t *get_most_nested_alloc_segment(
8484
8585 do {
8686 assert (level < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP );
87- found =
88- critnib_find ( hTracker -> alloc_segments_map [ level ], (uintptr_t )ptr ,
89- FIND_LE , ( void * ) & rkey , (void * * )& rvalue , & ref_value );
87+ found = critnib_find ( hTracker -> alloc_segments_map [ level ],
88+ (uintptr_t )ptr , FIND_LE , ( void * ) & rkey ,
89+ (void * * )& rvalue , & ref_value , false /* weak */ );
9090 if (!found ) {
9191 assert (ref_value == NULL );
9292 break ;
@@ -270,9 +270,9 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
270270 // in the critnib maps that contains the given 'ptr' pointer.
271271 do {
272272 assert (level < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP );
273- found =
274- critnib_find ( hTracker -> alloc_segments_map [ level ], (uintptr_t )ptr ,
275- FIND_LE , ( void * ) & rkey , (void * * )& rvalue , & ref_value );
273+ found = critnib_find ( hTracker -> alloc_segments_map [ level ],
274+ (uintptr_t )ptr , FIND_LE , ( void * ) & rkey ,
275+ (void * * )& rvalue , & ref_value , false /* weak */ );
276276 if (!found ) {
277277 assert (ref_value == NULL );
278278 break ;
@@ -501,7 +501,11 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
501501 return UMF_RESULT_ERROR_NOT_SUPPORTED ;
502502 }
503503
504+ #define CCC 0
505+
506+ #if CCC
504507 tracker_alloc_info_t * top_most_value = NULL ;
508+ #endif
505509 tracker_alloc_info_t * rvalue = NULL ;
506510 //uintptr_t top_most_key = 0;
507511 uintptr_t rkey = 0 ;
@@ -511,19 +515,24 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
511515 int found = 0 ;
512516
513517 void * ref_value = NULL ;
518+
519+ #if CCC
514520 void * ref_top_most_value = NULL ;
515521 int ref_level = 0 ;
516522
517523 do {
518524 assert (level < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP );
519- found =
520- critnib_find (TRACKER -> alloc_segments_map [level ], (uintptr_t )ptr ,
521- FIND_LE , (void * )& rkey , (void * * )& rvalue , & ref_value );
525+ #endif
526+
527+ found = critnib_find (TRACKER -> alloc_segments_map [level ], (uintptr_t )ptr ,
528+ FIND_LE , (void * )& rkey , (void * * )& rvalue ,
529+ & ref_value , true /* weak */ );
522530 if (!found ) {
523531 assert (ref_value == NULL );
524- break ;
532+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
525533 }
526534
535+ #if CCC
527536 if (!rvalue ) {
528537 if (ref_value ) {
529538 critnib_release (TRACKER -> alloc_segments_map [level ], ref_value );
@@ -539,10 +548,13 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
539548 ref_level = 0 ;
540549 continue ;
541550 }
551+ #endif
542552
543553 utils_atomic_load_acquire_u64 ((uint64_t * )& rvalue -> props .base_size ,
544554 & rsize );
545555 utils_atomic_load_acquire_size_t (& rvalue -> n_children , & n_children );
556+
557+ #if CCC
546558 if (found && (uintptr_t )ptr < rkey + rsize ) {
547559 //top_most_key = rkey;
548560 top_most_value = rvalue ;
@@ -560,7 +572,19 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
560572 level ++ ;
561573 }
562574 } while (found && (uintptr_t )ptr < rkey + rsize && n_children );
575+ #else
576+ if ((uintptr_t )ptr < rkey + rsize ) {
577+ * info = rvalue ;
578+ return UMF_RESULT_SUCCESS ;
579+ } else {
580+ * info = NULL ;
581+ LOG_DEBUG ("pointer %p not found in the tracker, TRACKER=%p" , ptr ,
582+ (void * )TRACKER );
583+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
584+ }
585+ #endif
563586
587+ #if CCC
564588 if (!top_most_value ) {
565589 if (ref_value ) {
566590 critnib_release (TRACKER -> alloc_segments_map [level ], ref_value );
@@ -570,13 +594,16 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
570594 (void * )TRACKER );
571595 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
572596 }
597+ #endif
573598
599+ #if CCC
574600 * info = top_most_value ;
575601
576602 assert (ref_top_most_value );
577603 critnib_release (TRACKER -> alloc_segments_map [ref_level ], ref_top_most_value );
578604
579605 return UMF_RESULT_SUCCESS ;
606+ #endif
580607}
581608
582609umf_result_t umfMemoryTrackerGetIpcInfo (const void * ptr ,
@@ -601,15 +628,18 @@ umf_result_t umfMemoryTrackerGetIpcInfo(const void *ptr,
601628 tracker_ipc_info_t * rvalue = NULL ;
602629 void * ref_value = NULL ;
603630 int found = critnib_find (TRACKER -> ipc_segments_map , (uintptr_t )ptr , FIND_LE ,
604- (void * )& rkey , (void * * )& rvalue , & ref_value );
631+ (void * )& rkey , (void * * )& rvalue , & ref_value ,
632+ true /* weak */ );
605633
606634 if (!found || (found && (rvalue == NULL )) ||
607635 ((uintptr_t )ptr >= rkey + rvalue -> size )) {
608636 LOG_DEBUG ("pointer %p not found in the tracker, TRACKER=%p" , ptr ,
609637 (void * )TRACKER );
638+ /*
610639 if (ref_value) {
611640 critnib_release(TRACKER->ipc_segments_map, ref_value);
612641 }
642+ */
613643 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
614644 }
615645
@@ -619,9 +649,11 @@ umf_result_t umfMemoryTrackerGetIpcInfo(const void *ptr,
619649
620650 pIpcInfo -> props = & rvalue -> props ;
621651
652+ /*
622653 if (ref_value) {
623654 critnib_release(TRACKER->ipc_segments_map, ref_value);
624655 }
656+ */
625657
626658 return UMF_RESULT_SUCCESS ;
627659}
@@ -754,19 +786,19 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
754786
755787 utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
756788
757- LOG_DEBUG (
758- "split memory region (level=%i): ptr=%p, totalSize=%zu, firstSize=%zu" ,
759- level , ptr , totalSize , firstSize );
789+ LOG_DEBUG ("split memory region (level=%i): ptr=%p, totalSize=%zu, "
790+ " firstSize=%zu" ,
791+ level , ptr , totalSize , firstSize );
760792
761793 return UMF_RESULT_SUCCESS ;
762794
763795err :
764796 utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
765797
766798err_lock :
767- LOG_ERR (
768- "failed to split memory region: ptr=%p, totalSize=%zu, firstSize=%zu" ,
769- ptr , totalSize , firstSize );
799+ LOG_ERR ("failed to split memory region: ptr=%p, totalSize=%zu, "
800+ " firstSize=%zu" ,
801+ ptr , totalSize , firstSize );
770802
771803 return ret ;
772804}
@@ -967,7 +999,7 @@ static void check_if_tracker_is_empty(umf_memory_tracker_handle_t hTracker,
967999 void * ref_value = NULL ;
9681000
9691001 while (1 == critnib_find (hTracker -> alloc_segments_map [i ], last_key ,
970- FIND_G , & rkey , (void * * )& rvalue , & ref_value )) {
1002+ FIND_G , & rkey , (void * * )& rvalue , & ref_value , false /* weak */ )) {
9711003 if (rvalue && ((rvalue -> props .pool == pool ) || pool == NULL )) {
9721004 n_items ++ ;
9731005 LOG_DEBUG (
0 commit comments