Merge branch '14482-rubysdk-empty-dir'
[arvados.git] / lib / dispatchcloud / scheduler / scheduler.go
index 9a5fb10d51c22de773ace09ad9cc1eee8bb65b3a..83fc08a9ffdb28c285965ca7a3f6cd41aba4dd7d 100644 (file)
@@ -10,7 +10,7 @@ import (
        "sync"
        "time"
 
-       "github.com/Sirupsen/logrus"
+       "github.com/sirupsen/logrus"
 )
 
 // A Scheduler maps queued containers onto unallocated workers in
@@ -37,6 +37,7 @@ type Scheduler struct {
 
        runOnce sync.Once
        stop    chan struct{}
+       stopped chan struct{}
 }
 
 // New returns a new unstarted Scheduler.
@@ -51,6 +52,7 @@ func New(logger logrus.FieldLogger, queue ContainerQueue, pool WorkerPool, stale
                staleLockTimeout:    staleLockTimeout,
                queueUpdateInterval: queueUpdateInterval,
                stop:                make(chan struct{}),
+               stopped:             make(chan struct{}),
                locking:             map[string]bool{},
        }
 }
@@ -64,9 +66,12 @@ func (sch *Scheduler) Start() {
 // Stop.
 func (sch *Scheduler) Stop() {
        close(sch.stop)
+       <-sch.stopped
 }
 
 func (sch *Scheduler) run() {
+       defer close(sch.stopped)
+
        // Ensure the queue is fetched once before attempting anything.
        for err := sch.queue.Update(); err != nil; err = sch.queue.Update() {
                sch.logger.Errorf("error updating queue: %s", err)