*/
THREAD_BLOCKED,
/** Thread has completed its execution */
- THREAD_COMPLETED
+ THREAD_COMPLETED,
+ THREAD_FREED
} thread_state;
~Thread();
void complete();
+ void freeResources();
static int swap(ucontext_t *ctxt, Thread *t);
static int swap(Thread *t, ucontext_t *ctxt);
+ static int swap(Thread *t, Thread *t2);
thread_state get_state() const { return state; }
void set_state(thread_state s);
void * get_pthread_return() { return pthread_return; }
/** @return True if this thread is finished executing */
- bool is_complete() const { return state == THREAD_COMPLETED; }
+ bool is_complete() const { return state == THREAD_COMPLETED || state == THREAD_FREED; }
+
+ /** @return True if this thread has finished and its resources have been freed */
+ bool is_freed() const { return state == THREAD_FREED; }
/** @return True if this thread is blocked */
bool is_blocked() const { return state == THREAD_BLOCKED; }