File tree Expand file tree Collapse file tree 2 files changed +17
-10
lines changed Expand file tree Collapse file tree 2 files changed +17
-10
lines changed Original file line number Diff line number Diff line change @@ -667,13 +667,14 @@ static inline uintptr_t _mi_random_shuffle(uintptr_t x) {
667667int _mi_os_numa_node_get (mi_os_tld_t * tld );
668668size_t _mi_os_numa_node_count_get (void );
669669
670- extern size_t _mi_numa_node_count ;
670+ extern _Atomic ( size_t ) _mi_numa_node_count ;
671671static inline int _mi_os_numa_node (mi_os_tld_t * tld ) {
672- if (mi_likely (_mi_numa_node_count == 1 )) return 0 ;
672+ if (mi_likely (mi_atomic_load_relaxed ( & _mi_numa_node_count ) == 1 )) return 0 ;
673673 else return _mi_os_numa_node_get (tld );
674674}
675675static inline size_t _mi_os_numa_node_count (void ) {
676- if (mi_likely (_mi_numa_node_count > 0 )) return _mi_numa_node_count ;
676+ const size_t count = mi_atomic_load_relaxed (& _mi_numa_node_count );
677+ if (mi_likely (count > 0 )) return count ;
677678 else return _mi_os_numa_node_count_get ();
678679}
679680
Original file line number Diff line number Diff line change @@ -1202,17 +1202,23 @@ static size_t mi_os_numa_node_countx(void) {
12021202}
12031203#endif
12041204
1205- size_t _mi_numa_node_count = 0 ; // cache the node count
1205+ _Atomic( size_t ) _mi_numa_node_count ; // = 0 // cache the node count
12061206
12071207size_t _mi_os_numa_node_count_get (void ) {
1208- if (mi_unlikely (_mi_numa_node_count <= 0 )) {
1208+ size_t count = mi_atomic_load_acquire (& _mi_numa_node_count );
1209+ if (count <= 0 ) {
12091210 long ncount = mi_option_get (mi_option_use_numa_nodes ); // given explicitly?
1210- if (ncount <= 0 ) ncount = (long )mi_os_numa_node_countx (); // or detect dynamically
1211- _mi_numa_node_count = (size_t )(ncount <= 0 ? 1 : ncount );
1212- _mi_verbose_message ("using %zd numa regions\n" , _mi_numa_node_count );
1211+ if (ncount > 0 ) {
1212+ count = (size_t )ncount ;
1213+ }
1214+ else {
1215+ count = mi_os_numa_node_countx (); // or detect dynamically
1216+ if (count == 0 ) count = 1 ;
1217+ }
1218+ mi_atomic_store_release (& _mi_numa_node_count , count ); // save it
1219+ _mi_verbose_message ("using %zd numa regions\n" , count );
12131220 }
1214- mi_assert_internal (_mi_numa_node_count >= 1 );
1215- return _mi_numa_node_count ;
1221+ return count ;
12161222}
12171223
12181224int _mi_os_numa_node_get (mi_os_tld_t * tld ) {
You can’t perform that action at this time.
0 commit comments