projects
/
c11tester.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
small changes
[c11tester.git]
/
threads-model.h
diff --git
a/threads-model.h
b/threads-model.h
index 5756c1029688fb6fd9d29616291d496129592f7a..15dd151577e908027f002565cf2855e95c85d787 100644
(file)
--- a/
threads-model.h
+++ b/
threads-model.h
@@
-33,7
+33,8
@@
typedef enum thread_state {
*/
THREAD_BLOCKED,
/** Thread has completed its execution */
*/
THREAD_BLOCKED,
/** Thread has completed its execution */
- THREAD_COMPLETED
+ THREAD_COMPLETED,
+ THREAD_FREED
} thread_state;
} thread_state;
@@
-46,6
+47,7
@@
public:
~Thread();
void complete();
~Thread();
void complete();
+ void freeResources();
static int swap(ucontext_t *ctxt, Thread *t);
static int swap(Thread *t, ucontext_t *ctxt);
static int swap(ucontext_t *ctxt, Thread *t);
static int swap(Thread *t, ucontext_t *ctxt);
@@
-80,7
+82,10
@@
public:
void * get_pthread_return() { return pthread_return; }
/** @return True if this thread is finished executing */
void * get_pthread_return() { return pthread_return; }
/** @return True if this thread is finished executing */
- bool is_complete() const { return state == THREAD_COMPLETED; }
+ bool is_complete() const { return state == THREAD_COMPLETED || state == THREAD_FREED; }
+
+ /** @return True if this thread has finished and its resources have been freed */
+ bool is_freed() const { return state == THREAD_FREED; }
/** @return True if this thread is blocked */
bool is_blocked() const { return state == THREAD_BLOCKED; }
/** @return True if this thread is blocked */
bool is_blocked() const { return state == THREAD_BLOCKED; }
@@
-102,6
+107,9
@@
public:
bool is_model_thread() const { return model_thread; }
bool is_model_thread() const { return model_thread; }
+ void * get_stack_addr() { return stack; }
+ ClockVector * get_acq_fence_cv() { return acq_fence_cv; }
+
friend void thread_startup();
#ifdef TLS
friend void setup_context();
friend void thread_startup();
#ifdef TLS
friend void setup_context();
@@
-136,6
+144,9
@@
private:
/** @brief The parent Thread which created this Thread */
Thread * const parent;
/** @brief The parent Thread which created this Thread */
Thread * const parent;
+ /** @brief Acquire fence cv */
+ ClockVector *acq_fence_cv;
+
/** @brief The THREAD_CREATE ModelAction which created this Thread */
ModelAction *creation;
/** @brief The THREAD_CREATE ModelAction which created this Thread */
ModelAction *creation;
@@
-157,6
+168,7
@@
private:
void *arg;
ucontext_t context;
void *stack;
void *arg;
ucontext_t context;
void *stack;
+ uint32_t stack_size;
#ifdef TLS
void * helper_stack;
public:
#ifdef TLS
void * helper_stack;
public:
@@
-191,6
+203,7
@@
void tlsdestructor(void *v);
#endif
Thread * thread_current();
#endif
Thread * thread_current();
+thread_id_t thread_current_id();
void thread_startup();
void initMainThread();
void thread_startup();
void initMainThread();