File tree Expand file tree Collapse file tree 2 files changed +15
-0
lines changed Expand file tree Collapse file tree 2 files changed +15
-0
lines changed Original file line number Diff line number Diff line change @@ -26,6 +26,8 @@ impl Thread {
2626 pub unsafe fn new ( stack : usize , p : Box < dyn FnOnce ( ) > ) -> io:: Result < Thread > {
2727 let p = Box :: into_raw ( Box :: new ( p) ) ;
2828
29+ // CreateThread rounds up values for the stack size to the nearest page size (at least 4kb).
30+ // If a value of zero is given then the default stack size is used instead.
2931 let ret = c:: CreateThread (
3032 ptr:: null_mut ( ) ,
3133 stack,
Original file line number Diff line number Diff line change @@ -423,3 +423,16 @@ fn scope_join_race() {
423423 } ) ;
424424 }
425425}
426+
427+ // Test that the smallest value for stack_size works on Windows.
428+ #[ cfg( windows) ]
429+ #[ test]
430+ fn test_minimal_thread_stack ( ) {
431+ use crate :: sync:: atomic:: AtomicU8 ;
432+ static COUNT : AtomicU8 = AtomicU8 :: new ( 0 ) ;
433+
434+ let builder = thread:: Builder :: new ( ) . stack_size ( 1 ) ;
435+ let before = builder. spawn ( || COUNT . fetch_add ( 1 , Ordering :: Relaxed ) ) . unwrap ( ) . join ( ) . unwrap ( ) ;
436+ assert_eq ! ( before, 0 ) ;
437+ assert_eq ! ( COUNT . load( Ordering :: Relaxed ) , 1 ) ;
438+ }
You can’t perform that action at this time.
0 commit comments