X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=threads-model.h;h=752731e246adc93c9ecaa6a03fef22471f04f77c;hp=ef2c9e10433559c519d1d6062963e2dd6b342f91;hb=95ee0b6522a582a1a4501c12244d661905ba8a00;hpb=ed73252cff03383a802a9608a97e5234bc90fcc4 diff --git a/threads-model.h b/threads-model.h index ef2c9e10..752731e2 100644 --- a/threads-model.h +++ b/threads-model.h @@ -5,13 +5,13 @@ #ifndef __THREADS_MODEL_H__ #define __THREADS_MODEL_H__ -#include #include #include "mymemory.h" #include #include "modeltypes.h" #include "stl-model.h" +#include "context.h" struct thread_params { thrd_start_t func; @@ -41,7 +41,9 @@ class ModelAction; class Thread { public: Thread(thread_id_t tid); - Thread(thrd_t *t, void (*func)(void *), void *a, Thread *parent); + Thread(thread_id_t tid, thrd_t *t, void (*func)(void *), void *a, Thread *parent); + Thread(thread_id_t tid, thrd_t *t, void *(*func)(void *), void *a, Thread *parent); + ~Thread(); void complete(); @@ -72,6 +74,10 @@ public: */ uint64_t get_return_value() const { return last_action_val; } + /** @set and get the return value from pthread functions */ + void set_pthread_return(void *ret) { pthread_return = ret; } + void * get_pthread_return() { return pthread_return; } + /** @return True if this thread is finished executing */ bool is_complete() const { return state == THREAD_COMPLETED; } @@ -131,6 +137,8 @@ private: ModelAction *pending; void (*start_routine)(void *); + void *(*pstart_routine)(void *); + void *arg; ucontext_t context; void *stack; @@ -145,6 +153,9 @@ private: */ uint64_t last_action_val; + /** the value return from pthread functions */ + void * pthread_return; + /** @brief Is this Thread a special model-checker thread? */ const bool model_thread; };