threads: save id within class Thread
authorBrian Norris <banorris@uci.edu>
Tue, 24 Apr 2012 02:22:52 +0000 (19:22 -0700)
committerBrian Norris <banorris@uci.edu>
Tue, 24 Apr 2012 02:22:52 +0000 (19:22 -0700)
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
model.h
threads.cc
threads.h

index f3844f0ad1e1d70d0060934eef73ca7032a048d8..1f13de7f1e5ac4c74cea012bc096f0a23d666cfe 100644 (file)
--- 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 7dbd9ab3219130ccfb4a234a870f278072d4240d..64d052fcbf9b5cab928b3ebfbb62554aa7e42939 100644 (file)
--- 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);
 
index 4c2086d7ce7c74a82277aad853d845d345374a2a..4c7ac41f1849d2a18fa6ad4510df118f2d81f87d 100644 (file)
@@ -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;
 }
 
 /*
index 8e0c3b054dfe7c84a92f60f0cc44ee700db00518..0c5fdab9d7a2209d4fda10680b0f737b03c657f2 100644 (file)
--- 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;
 };