
Am 27.11.2012 00:45 schrieb "Valentin Milea" <valentin.milea@gmail.com>:
Hi,
I'm working on a tiny coroutine library based on boost::context. For performance reasons I'd rather keep a pool of stacks instead allocating/deallocating every time. Is it legal to reuse a stack for a different context?
yes, but only one context is allowed to own the stack. If the context is deallocated you could asign the stack to another context via make_fcontext() instead to deallocate it. Therefore your code is not correct (two context's share the same stack at the same time).
int main(int argc, char * argv[]) { ctx::guarded_stack_allocator alloc;
std::size_t size =
ctx::guarded_stack_allocator::default_stacksize();
void *sp = alloc.allocate(size);
fc = ctx::make_fcontext(sp, size, f1); std::cout << "main: jump 1" << std::endl; ctx::jump_fcontext(&fcm, fc, 0);
fc = ctx::make_fcontext(sp, size, f2); // legal? No std::cout << "main: jump 2" << std::endl; ctx::jump_fcontext(&fcm, fc, 0);
std::cout << "main: done" << std::endl;
return 0; }
_______________________________________________ Unsubscribe & other changes: