X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=threads-model.h;h=eb0fd438d388931ef0316231abd828d6e5295581;hb=bee1e27429b9a66e414eb83cf14e2089dd40a79e;hp=30acd2deba1f50e27a15d1c2d74a649809cf004a;hpb=dc9c89654982c64264dfee7b1ea23e9a5e88e18e;p=model-checker.git diff --git a/threads-model.h b/threads-model.h index 30acd2d..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 * parent_thrd = NULL); + 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