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 98df424..4d6a024 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;
 }