static void * stack_allocate(size_t size)
{
- return userMalloc(size);
+ return malloc(size);
}
static void stack_free(void *stack)
{
- userFree(stack);
+ free(stack);
}
Thread * thread_current(void)
{
+ ASSERT(model);
return model->scheduler->get_current_thread();
}
+/* This method just gets around makecontext not being 64-bit clean */
+
+void thread_startup() {
+ Thread * curr_thread = thread_current();
+ curr_thread->start_routine(curr_thread->arg);
+}
+
int Thread::create_context()
{
int ret;
context.uc_stack.ss_size = STACK_SIZE;
context.uc_stack.ss_flags = 0;
context.uc_link = model->get_system_context();
- makecontext(&context, start_routine, 1, arg);
+ makecontext(&context, thread_startup, 0);
return 0;
}
}
}
-
-Thread::Thread(thrd_t *t, void (*func)(), void *a) {
+Thread::Thread(thrd_t *t, void (*func)(void *), void *a) :
+ last_action_val(VALUE_NONE)
+{
int ret;
user_thread = t;