forked from M-Labs/libfringe
Fix Stack::new(0).
This commit is contained in:
parent
aa364056fd
commit
758088c673
|
@ -28,9 +28,12 @@ impl Stack {
|
|||
pub fn new(size: usize) -> Result<Stack, IoError> {
|
||||
let page_size = sys::page_size();
|
||||
|
||||
// Stacks have to be at least one page long.
|
||||
let len = if size == 0 { page_size } else { size };
|
||||
|
||||
// Round the length one page size up, using the fact that the page size
|
||||
// is a power of two.
|
||||
let len = (size + page_size - 1) & !(page_size - 1);
|
||||
let len = (len + page_size - 1) & !(page_size - 1);
|
||||
|
||||
// Increase the length to fit the guard page.
|
||||
let len = len + page_size;
|
||||
|
|
|
@ -6,7 +6,14 @@ extern crate fringe;
|
|||
use fringe::{Stack, OsStack};
|
||||
|
||||
#[test]
|
||||
fn stack_accessible() {
|
||||
fn default_stack() {
|
||||
let stack = OsStack::new(0).unwrap();
|
||||
// Make sure the topmost page of the stack, at least, is accessible.
|
||||
unsafe { *(stack.top().offset(-1)) = 0; }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn one_page_stack() {
|
||||
let stack = OsStack::new(4096).unwrap();
|
||||
// Make sure the topmost page of the stack, at least, is accessible.
|
||||
unsafe { *(stack.top().offset(-1)) = 0; }
|
||||
|
|
Loading…
Reference in New Issue