projects
/
c11tester.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Change initialize a bit
[c11tester.git]
/
threads-model.h
diff --git
a/threads-model.h
b/threads-model.h
index f2162a89e55752ffde61e74ebf3f0c675584d4ba..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,9
+47,11
@@
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);
+ static int swap(Thread *t, Thread *t2);
thread_state get_state() const { return state; }
void set_state(thread_state s);
thread_state get_state() const { return state; }
void set_state(thread_state s);
@@
-79,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; }
@@
-101,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();
@@
-135,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;
@@
-156,7
+168,9
@@
private:
void *arg;
ucontext_t context;
void *stack;
void *arg;
ucontext_t context;
void *stack;
+ uint32_t stack_size;
#ifdef TLS
#ifdef TLS
+ void * helper_stack;
public:
char *tls;
ucontext_t helpercontext;
public:
char *tls;
ucontext_t helpercontext;
@@
-185,11
+199,13
@@
private:
#ifdef TLS
uintptr_t get_tls_addr();
#ifdef TLS
uintptr_t get_tls_addr();
+void tlsdestructor(void *v);
#endif
Thread * thread_current();
#endif
Thread * thread_current();
+thread_id_t thread_current_id();
void thread_startup();
void thread_startup();
-void
main_thread_startup
();
+void
initMainThread
();
static inline thread_id_t thrd_to_id(thrd_t t)
{
static inline thread_id_t thrd_to_id(thrd_t t)
{