diff --git a/lib/rob/schedulers/v1/sink.go b/lib/rob/schedulers/v1/sink.go index 93b9ecfb87abf9a0f3b208a1751cc8d27e42393d..e68a80fc8937979590b70b3a42b0b66e47f6e72e 100644 --- a/lib/rob/schedulers/v1/sink.go +++ b/lib/rob/schedulers/v1/sink.go @@ -111,13 +111,14 @@ func (T *Sink) _next() *Source { for { runtime, source, ok := T.queue.Min() if !ok { + // unlock to allow work to be added to queue (or stolen) while we wait + T.mu.Unlock() // attempt to steal source = T.stealer.steal(T) if source != nil { + T.mu.Lock() T._assign(source) } else { - // unlock to allow work to be added to queue while we wait - T.mu.Unlock() select { case <-T.ready: case <-time.After(stealPeriod):