Skip to content

Commit 8182860

Browse files
committed
Document and test minimal stack size on Windows
1 parent 8cd7aaa commit 8182860

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

library/std/src/sys/pal/windows/thread.rs

+2
Original file line numberDiff line numberDiff 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,

library/std/src/thread/tests.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::mem;
44
use crate::panic::panic_any;
55
use crate::result;
66
use crate::sync::{
7-
atomic::{AtomicBool, Ordering},
7+
atomic::{AtomicBool, AtomicU8, Ordering},
88
mpsc::{channel, Sender},
99
Arc, Barrier,
1010
};
@@ -423,3 +423,14 @@ 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+
static COUNT: AtomicU8 = AtomicU8::new(0);
432+
433+
let builder = thread::Builder::new().stack_size(1);
434+
builder.spawn(move || COUNT.fetch_add(1, Ordering::Relaxed)).unwrap().join().unwrap();
435+
assert_eq!(COUNT.load(Ordering::Relaxed), 1);
436+
}

0 commit comments

Comments
 (0)