@@ -160,6 +160,7 @@ mod tests;
160
160
161
161
use crate :: any:: Any ;
162
162
use crate :: cell:: { OnceCell , UnsafeCell } ;
163
+ use crate :: env;
163
164
use crate :: ffi:: { CStr , CString } ;
164
165
use crate :: fmt;
165
166
use crate :: io;
@@ -171,9 +172,9 @@ use crate::panicking;
171
172
use crate :: pin:: Pin ;
172
173
use crate :: ptr:: addr_of_mut;
173
174
use crate :: str;
175
+ use crate :: sync:: atomic:: { AtomicUsize , Ordering } ;
174
176
use crate :: sync:: Arc ;
175
177
use crate :: sys:: thread as imp;
176
- use crate :: sys_common:: thread;
177
178
use crate :: sys_common:: thread_parking:: Parker ;
178
179
use crate :: sys_common:: { AsInner , IntoInner } ;
179
180
use crate :: time:: { Duration , Instant } ;
@@ -468,7 +469,23 @@ impl Builder {
468
469
{
469
470
let Builder { name, stack_size } = self ;
470
471
471
- let stack_size = stack_size. unwrap_or_else ( thread:: min_stack) ;
472
+ let stack_size = stack_size. unwrap_or_else ( || {
473
+ static MIN : AtomicUsize = AtomicUsize :: new ( 0 ) ;
474
+
475
+ match MIN . load ( Ordering :: Relaxed ) {
476
+ 0 => { }
477
+ n => return n - 1 ,
478
+ }
479
+
480
+ let amt = env:: var_os ( "RUST_MIN_STACK" )
481
+ . and_then ( |s| s. to_str ( ) . and_then ( |s| s. parse ( ) . ok ( ) ) )
482
+ . unwrap_or ( imp:: DEFAULT_MIN_STACK_SIZE ) ;
483
+
484
+ // 0 is our sentinel value, so ensure that we'll never see 0 after
485
+ // initialization has run
486
+ MIN . store ( amt + 1 , Ordering :: Relaxed ) ;
487
+ amt
488
+ } ) ;
472
489
473
490
let my_thread = Thread :: new ( name. map ( |name| {
474
491
CString :: new ( name) . expect ( "thread name may not contain interior null bytes" )
@@ -1191,17 +1208,17 @@ impl ThreadId {
1191
1208
1192
1209
cfg_if:: cfg_if! {
1193
1210
if #[ cfg( target_has_atomic = "64" ) ] {
1194
- use crate :: sync:: atomic:: { AtomicU64 , Ordering :: Relaxed } ;
1211
+ use crate :: sync:: atomic:: AtomicU64 ;
1195
1212
1196
1213
static COUNTER : AtomicU64 = AtomicU64 :: new( 0 ) ;
1197
1214
1198
- let mut last = COUNTER . load( Relaxed ) ;
1215
+ let mut last = COUNTER . load( Ordering :: Relaxed ) ;
1199
1216
loop {
1200
1217
let Some ( id) = last. checked_add( 1 ) else {
1201
1218
exhausted( ) ;
1202
1219
} ;
1203
1220
1204
- match COUNTER . compare_exchange_weak( last, id, Relaxed , Relaxed ) {
1221
+ match COUNTER . compare_exchange_weak( last, id, Ordering :: Relaxed , Ordering :: Relaxed ) {
1205
1222
Ok ( _) => return ThreadId ( NonZero :: new( id) . unwrap( ) ) ,
1206
1223
Err ( id) => last = id,
1207
1224
}
0 commit comments