X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=threads-model.h;h=eb0fd438d388931ef0316231abd828d6e5295581;hb=20994240335ce1d54fb6c4b2c8df684182f0a3f9;hp=fd0314ad6b9fa34ac5a42c0fd9cfd94f6f552753;hpb=09c3eb5539455e82dcb357fbce82bf5974c3a37c;p=model-checker.git diff --git a/threads-model.h b/threads-model.h index fd0314a..eb0fd43 100644 --- a/threads-model.h +++ b/threads-model.h @@ -7,11 +7,11 @@ #include #include -#include #include "mymemory.h" #include #include "modeltypes.h" +#include "stl-model.h" struct thread_params { thrd_start_t func; @@ -41,7 +41,7 @@ class ModelAction; class Thread { public: Thread(thread_id_t tid); - Thread(thrd_t *t, void (*func)(void *), void *a); + Thread(thrd_t *t, void (*func)(void *), void *a, Thread *parent); ~Thread(); void complete(); @@ -104,6 +104,8 @@ public: * @see Thread::pending */ void set_pending(ModelAction *act) { pending = act; } + Thread * waiting_on() const; + /** * Remove one ModelAction from the waiting list * @return The ModelAction that was removed from the waiting list @@ -124,11 +126,23 @@ public: * to allow their allocation/deallocation to follow the same pattern as * the rest of the backtracked/replayed program. */ + void * operator new(size_t size) { + return Thread_malloc(size); + } + void operator delete(void *p, size_t size) { + Thread_free(p); + } + void * operator new[](size_t size) { + return Thread_malloc(size); + } + void operator delete[](void *p, size_t size) { + Thread_free(p); + } private: int create_context(); /** @brief The parent Thread which created this Thread */ - Thread *parent; + Thread * const parent; /** @brief The THREAD_CREATE ModelAction which created this Thread */ ModelAction *creation; @@ -155,7 +169,7 @@ private: * list is used for thread joins, where another Thread waits for this * Thread to complete */ - std::vector< ModelAction *, SnapshotAlloc > wait_list; + SnapVector wait_list; /** * The value returned by the last action in this thread