change snapshot mode
[c11tester.git] / threads-model.h
index ef2c9e10433559c519d1d6062963e2dd6b342f91..752731e246adc93c9ecaa6a03fef22471f04f77c 100644 (file)
@@ -5,13 +5,13 @@
 #ifndef __THREADS_MODEL_H__
 #define __THREADS_MODEL_H__
 
-#include <ucontext.h>
 #include <stdint.h>
 
 #include "mymemory.h"
 #include <threads.h>
 #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;
 };