-/* -*- Mode: C; indent-tabs-mode: t -*- */
-
#include "libthreads.h"
#include "common.h"
#include "threads.h"
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();
+ Thread * curr_thread = thread_current();
curr_thread->start_routine(curr_thread->arg);
}
}
}
-Thread::Thread(thrd_t *t, void (*func)(void *), void *a) {
+Thread::Thread(thrd_t *t, void (*func)(void *), void *a) :
+ start_routine(func),
+ arg(a),
+ user_thread(t),
+ state(THREAD_CREATED),
+ last_action_val(VALUE_NONE)
+{
int ret;
- user_thread = t;
- start_routine = func;
- arg = a;
-
/* Initialize state */
ret = create_context();
if (ret)
printf("Error in create_context\n");
- state = THREAD_CREATED;
id = model->get_next_id();
*user_thread = id;
parent = thread_current();