@@ -50,9 +50,9 @@ typedef struct tracker_alloc_info_t {
5050 // in the next level of map
5151 // falling within the current range
5252 size_t n_children ;
53- #ifndef NDEBUG
54- size_t is_freed ;
55- #endif /* NDEBUG */
53+ #if !defined( NDEBUG ) && defined( UMF_DEVELOPER_MODE )
54+ uint64_t is_freed ;
55+ #endif
5656} tracker_alloc_info_t ;
5757
5858typedef struct tracker_ipc_info_t {
@@ -194,9 +194,9 @@ umfMemoryTrackerAddAtLevel(umf_memory_tracker_handle_t hTracker, int level,
194194 value -> pool = pool ;
195195 value -> size = size ;
196196 value -> n_children = 0 ;
197- #ifndef NDEBUG
197+ #if !defined( NDEBUG ) && defined( UMF_DEVELOPER_MODE )
198198 value -> is_freed = 0 ;
199- #endif /* NDEBUG */
199+ #endif
200200
201201 assert (level < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP );
202202 int ret = critnib_insert (hTracker -> alloc_segments_map [level ],
@@ -276,10 +276,12 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
276276 continue ;
277277 }
278278
279- #ifndef NDEBUG
279+ #if !defined( NDEBUG ) && defined( UMF_DEVELOPER_MODE )
280280 // make sure rvalue is not freed
281- assert (rvalue -> is_freed != 0xDEADBEEF );
282- #endif /* NDEBUG */
281+ uint64_t is_freed ;
282+ utils_atomic_load_acquire_u64 (& rvalue -> is_freed , & is_freed );
283+ assert (is_freed != 0xDEADBEEF );
284+ #endif
283285
284286 utils_atomic_load_acquire_u64 ((uint64_t * )& rvalue -> size , & rsize );
285287
@@ -1354,10 +1356,10 @@ void umfTrackingMemoryProviderGetUpstreamProvider(
13541356
13551357static void free_leaf (void * leaf_allocator , void * ptr ) {
13561358 if (ptr ) {
1357- #ifndef NDEBUG
1359+ #if !defined( NDEBUG ) && defined( UMF_DEVELOPER_MODE )
13581360 tracker_alloc_info_t * value = (tracker_alloc_info_t * )ptr ;
1359- value -> is_freed = 0xDEADBEEF ;
1360- #endif /* NDEBUG */
1361+ utils_atomic_store_release_u64 ( & value -> is_freed , 0xDEADBEEF ) ;
1362+ #endif
13611363 umf_ba_free (leaf_allocator , ptr );
13621364 }
13631365}
0 commit comments