core/synch.c
/* Only valid while holding all_threads_synch_lock and thread_initexit_lock.  Set to
 * whether synch_with_all_threads was successful in synching this thread.
 * Cannot be called when THREAD_SYNCH_*_AND_CLEANED was requested as the
 * thread-local memory will be freed on success!
 */
Only valid while holding all_threads_synch_lock and thread_initexit_lock.  Set to
whether synch_with_all_threads was successful in synching this thread.
Cannot be called when THREAD_SYNCH_*_AND_CLEANED was requested as the
thread-local memory will be freed on success!
Only valid while holding all_threads_synch_lock and thread_initexit_lock . Set to whether synch_with_all_threads was successful in synching this thread . Cannot be called when THREAD_SYNCH_ * _AND_CLEANED was requested as the thread - local memory will be freed on success!
bool
thread_synch_successful(thread_record_t *tr)
{
    thread_synch_data_t *tsd;
    ASSERT(tr != NULL && tr->dcontext != NULL);
    ASSERT_OWN_MUTEX(true, &all_threads_synch_lock);
    ASSERT_OWN_MUTEX(true, &thread_initexit_lock);
    tsd = (thread_synch_data_t *) tr->dcontext->synch_field;
    return tsd->synch_with_success;
}
bool thread_synch_successful ( thread_record_t * tr ) { thread_synch_data_t * tsd ; ASSERT ( tr != NULL && tr -> dcontext != NULL ) ; ASSERT_OWN_MUTEX ( true , & all_threads_synch_lock ) ; ASSERT_OWN_MUTEX ( true , & thread_initexit_lock ) ; tsd = ( thread_synch_data_t * ) tr -> dcontext -> synch_field ; return tsd -> synch_with_success ; }
Only valid while holding all_threads_synch_lock and thread_initexit_lock.
Only valid while holding all_threads_synch_lock and thread_initexit_lock .