diff --git a/utils/wvtask.cc b/utils/wvtask.cc index 0474e48..c1ff69a 100644 --- a/utils/wvtask.cc +++ b/utils/wvtask.cc @@ -63,6 +63,16 @@ char *WvTaskMan::stacktop; static int context_return; +// asserting wrapper for getcontext(3). +static int assert_getcontext(ucontext_t *__ucp) +{ + int result; + + result = getcontext(__ucp); + assert(result == 0); + + return result; +} static bool use_shared_stack() { @@ -195,7 +205,7 @@ WvTaskMan::WvTaskMan() stacktop = (char *)alloca(0); context_return = 0; - assert(getcontext(&get_stack_return) == 0); + assert_getcontext(&get_stack_return); if (context_return == 0) { // initial setup - start the stackmaster() task (never returns!) @@ -261,7 +271,7 @@ int WvTaskMan::run(WvTask &task, int val) state = &old_task->mystate; context_return = 0; - assert(getcontext(state) == 0); + assert_getcontext(state); int newval = context_return; if (newval == 0) { @@ -315,7 +325,7 @@ int WvTaskMan::yield(int val) #endif context_return = 0; - assert(getcontext(¤t_task->mystate) == 0); + assert_getcontext(¤t_task->mystate); int newval = context_return; if (newval == 0) { @@ -337,7 +347,7 @@ int WvTaskMan::yield(int val) void WvTaskMan::get_stack(WvTask &task, size_t size) { context_return = 0; - assert(getcontext(&get_stack_return) == 0); + assert_getcontext(&get_stack_return); if (context_return == 0) { assert(magic_number == -WVTASK_MAGIC); @@ -401,7 +411,7 @@ void WvTaskMan::_stackmaster() assert(magic_number == -WVTASK_MAGIC); context_return = 0; - assert(getcontext(&stackmaster_task) == 0); + assert_getcontext(&stackmaster_task); val = context_return; if (val == 0) { @@ -466,7 +476,7 @@ void WvTaskMan::do_task() // back here from longjmp; someone wants stack space. context_return = 0; - assert(getcontext(&task->mystate) == 0); + assert_getcontext(&task->mystate); if (context_return == 0) { // done the setjmp; that means the target task now has @@ -502,7 +512,7 @@ void WvTaskMan::do_task() } else { - assert(getcontext(&task->func_call) == 0); + assert_getcontext(&task->func_call); task->func_call.uc_stack.ss_size = task->stacksize; task->func_call.uc_stack.ss_sp = task->stack; task->func_call.uc_stack.ss_flags = 0; @@ -513,7 +523,7 @@ void WvTaskMan::do_task() (void (*)(void))call_func, 1, task); context_return = 0; - assert(getcontext(&task->func_return) == 0); + assert_getcontext(&task->func_return); if (context_return == 0) setcontext(&task->func_call); }