libthreads: don't spin on THREAD_JOIN
authorBrian Norris <banorris@uci.edu>
Thu, 6 Sep 2012 20:55:05 +0000 (13:55 -0700)
committerBrian Norris <banorris@uci.edu>
Thu, 6 Sep 2012 20:55:05 +0000 (13:55 -0700)
THREAD_JOIN can now be implemented properly here. We shouldn't have to spin,
waiting for another thread to complete. This may help improve the ModelChecker
architecture, since we will never have NULL actions passed to the ModelChecker.

libthreads.cc

index 98df4248fd83749ac9d7c36b7cbb14a3473a2710..4d6a0243c53b7fe880952747236bd8327c04a108 100644 (file)
@@ -23,8 +23,7 @@ int thrd_create(thrd_t *t, thrd_start_t start_routine, void *arg)
 int thrd_join(thrd_t t)
 {
        Thread *th = model->get_thread(thrd_to_id(t));
-       while (th->get_state() != THREAD_COMPLETED)
-               model->switch_to_master(NULL);
+       model->switch_to_master(new ModelAction(THREAD_JOIN, std::memory_order_seq_cst, th, thrd_to_id(t)));
        return 0;
 }