X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=threads.cc;fp=threads.cc;h=e4b46561a0e7be13016661a541f09146b9726f28;hb=a11b6cce3a692a041cbfb772282a68be7949eb02;hp=00e5c2fbd4a0f1287ac6b68b8be50a1a49b82bd8;hpb=ab73aff1ea7d1b5b8140b361824580449a6b4398;p=model-checker.git diff --git a/threads.cc b/threads.cc index 00e5c2f..e4b4656 100644 --- a/threads.cc +++ b/threads.cc @@ -199,7 +199,7 @@ void Thread::set_state(thread_state s) } /** - * Get the Thread that this Thread is waiting on + * Get the Thread that this Thread is immediately waiting on * @return The thread we are waiting on, if any; otherwise NULL */ Thread * Thread::waiting_on() const @@ -213,3 +213,19 @@ Thread * Thread::waiting_on() const return (Thread *)pending->get_mutex()->get_state()->locked; return NULL; } + +/** + * Check if this Thread is waiting (blocking) on a given Thread, directly or + * indirectly (via a chain of waiting threads) + * + * @param t The Thread on which we may be waiting + * @return True if we are waiting on Thread t; false otherwise + */ +bool Thread::is_waiting_on(const Thread *t) const +{ + Thread *wait; + for (wait = waiting_on(); wait != NULL; wait = wait->waiting_on()) + if (wait == t) + return true; + return false; +}