From a9aac0d43e0e24354af4163cd3161036586f029a Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Mon, 23 Apr 2012 19:22:52 -0700 Subject: [PATCH] threads: save id within class Thread There may be points at which the user's thread ID struct goes out of scope, but I still need it internally. I think I'll just keep it internally, with a duplicate in the user's copy. --- model.cc | 4 ++-- model.h | 2 +- threads.cc | 8 +++++--- threads.h | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/model.cc b/model.cc index f3844f0a..1f13de7f 100644 --- a/model.cc +++ b/model.cc @@ -30,9 +30,9 @@ ModelChecker::~ModelChecker() delete rootNode; } -void ModelChecker::assign_id(Thread *t) +int ModelChecker::get_next_id() { - t->set_id(++used_thread_id); + return ++used_thread_id; } void ModelChecker::add_system_thread(Thread *t) diff --git a/model.h b/model.h index 7dbd9ab3..64d052fc 100644 --- a/model.h +++ b/model.h @@ -81,7 +81,7 @@ public: int add_thread(Thread *t); Thread * get_thread(thread_id_t tid) { return thread_map[tid]; } - void assign_id(Thread *t); + int get_next_id(); int switch_to_master(ModelAction *act); diff --git a/threads.cc b/threads.cc index 4c2086d7..4c7ac41f 100644 --- a/threads.cc +++ b/threads.cc @@ -73,7 +73,8 @@ Thread::Thread(thrd_t *t, void (*func)(), void *a) { printf("Error in create_context\n"); state = THREAD_CREATED; - model->assign_id(this); + id = model->get_next_id(); + *user_thread = id; model->scheduler->add_thread(this); } @@ -84,14 +85,15 @@ Thread::Thread(thrd_t *t) { arg = NULL; state = THREAD_CREATED; - model->assign_id(this); + id = model->get_next_id(); + *user_thread = id; create_context(); model->add_system_thread(this); } thread_id_t Thread::get_id() { - return thrd_to_id(*user_thread); + return id; } /* diff --git a/threads.h b/threads.h index 8e0c3b05..0c5fdab9 100644 --- a/threads.h +++ b/threads.h @@ -24,7 +24,6 @@ public: thread_state get_state() { return state; } void set_state(thread_state s) { state = s; } thread_id_t get_id(); - void set_id(thread_id_t i) { *user_thread = i; } thrd_t get_thrd_t() { return *user_thread; } private: int create_context(); @@ -34,6 +33,7 @@ private: ucontext_t context; void *stack; thrd_t *user_thread; + thread_id_t id; thread_state state; }; -- 2.34.1