X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=threads.h;h=91db236f4bddb904fbd7944c35c00b39bbfce092;hb=9db4729d3e6ab5f3ec5fd8a2560d95026332fecf;hp=b69f4265618d1dd2eb4ef18c66aef2b4442a0496;hpb=12b1a10eeff58161619bafcfd8e288b3e2c76621;p=model-checker.git diff --git a/threads.h b/threads.h index b69f426..91db236 100644 --- a/threads.h +++ b/threads.h @@ -35,6 +35,7 @@ class ModelAction; /** @brief A Thread is created for each user-space thread */ class Thread { public: + Thread(thread_id_t tid); Thread(thrd_t *t, void (*func)(void *), void *a); ~Thread(); void complete(); @@ -81,6 +82,14 @@ public: */ void push_wait_list(ModelAction *act) { wait_list.push_back(act); } + unsigned int num_wait_list() { + return wait_list.size(); + } + + ModelAction * get_waiter(unsigned int i) { + return wait_list[i]; + } + ModelAction * get_pending() { return pending; } void set_pending(ModelAction *act) { pending = act; } /** @@ -93,9 +102,16 @@ public: return ret; } + bool is_model_thread() { return model_thread; } + friend void thread_startup(); - SNAPSHOTALLOC + /** + * Intentionally NOT allocated with MODELALLOC or SNAPSHOTALLOC. + * Threads should be allocated on the user's normal (snapshotting) heap + * to allow their allocation/deallocation to follow the same pattern as + * the rest of the backtracked/replayed program. + */ private: int create_context(); Thread *parent; @@ -115,7 +131,7 @@ private: * list is used for thread joins, where another Thread waits for this * Thread to complete */ - std::vector wait_list; + std::vector< ModelAction *, SnapshotAlloc > wait_list; /** * The value returned by the last action in this thread @@ -123,6 +139,9 @@ private: * @see Thread::get_return_value() */ uint64_t last_action_val; + + /** @brief Is this Thread a special model-checker thread? */ + const bool model_thread; }; Thread * thread_current();