From 25f7c844df79a92b0de75f2ac658f31307e492c5 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 19 Dec 2011 22:47:28 -0800 Subject: rt: Don't reuse stack segments when they are not big enough --- src/rt/rust_task.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/rt/rust_task.cpp') diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index f30315174b6..70f3ce41796 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -123,7 +123,7 @@ new_stk(rust_scheduler *sched, rust_task *task, size_t requested_sz) size_t prev_sz = (size_t)(task->stk->prev->end - (uintptr_t)&task->stk->prev->data[0] - RED_ZONE_SIZE); - if (min_sz <= prev_sz) { + if (min_sz <= prev_sz && requested_sz <= prev_sz) { LOG(task, mem, "reusing existing stack"); task->stk = task->stk->prev; A(sched, task->stk->prev == NULL, "Bogus stack ptr"); @@ -700,7 +700,8 @@ void * rust_task::new_stack(size_t stk_sz, void *args_addr, size_t args_sz) { stk_seg *stk_seg = new_stk(sched, this, stk_sz + args_sz); - + A(sched, stk_seg->end - (uintptr_t)stk_seg->data >= stk_sz + args_sz, + "Did not receive enough stack"); uint8_t *new_sp = (uint8_t*)stk_seg->end; // Push the function arguments to the new stack new_sp = align_down(new_sp - args_sz); -- cgit 1.4.1-3-g733a5