// GetDistributableJobToRace //------------------------------------------------------------------------------ Job * JobQueue::GetDistributableJobToRace() { MutexHolder m( m_DistributedJobsMutex ); if ( m_DistributedJobsRemote.IsEmpty() ) { return nullptr; } // take newest job, which is least likely to finish first // compared to older distributed jobs Job * job = m_DistributedJobsRemote.Top(); m_DistributedJobsRemote.Pop(); m_DistributedJobsBeingRaced.Append( job ); // TODO:B We should defer the remote cancellation // to have a proper race CancelledJob c( job, job->GetJobId() ); m_DistributedJobsCancelled.Append( c ); return job; }