Skip to content

Commit 19e025c

Browse files
Merge pull request #448 from gabriel-samfira/fix-sleep
Fix sleepWithCancel and ensure closed channel
2 parents 20d4e68 + b23bca7 commit 19e025c

4 files changed

Lines changed: 17 additions & 7 deletions

File tree

runner/pool/pool.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,6 +1369,9 @@ func (r *basePoolManager) deleteInstanceFromProvider(ctx context.Context, instan
13691369
}
13701370

13711371
func (r *basePoolManager) sleepWithCancel(sleepTime time.Duration) (canceled bool) {
1372+
if sleepTime == 0 {
1373+
return false
1374+
}
13721375
ticker := time.NewTicker(sleepTime)
13731376
defer ticker.Stop()
13741377

workers/cache/tool_cache.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ func (t *toolsUpdater) Reset() {
135135
}
136136

137137
func (t *toolsUpdater) sleepWithCancel(sleepTime time.Duration) (canceled bool) {
138+
if sleepTime == 0 {
139+
return false
140+
}
138141
ticker := time.NewTicker(sleepTime)
139142
defer ticker.Stop()
140143

workers/scaleset/scaleset.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,9 @@ func (w *Worker) loop() {
634634
}
635635

636636
func (w *Worker) sleepWithCancel(sleepTime time.Duration) (canceled bool) {
637+
if sleepTime == 0 {
638+
return false
639+
}
637640
ticker := time.NewTicker(sleepTime)
638641
defer ticker.Stop()
639642

@@ -663,10 +666,7 @@ Loop:
663666
}
664667
continue
665668
}
666-
// noop if already started. If the scaleset was just enabled, we need to
667-
// start the listener here, or the <-w.listener.Wait() channel receive bellow
668-
// will block forever, even if we start the listener, as a nil channel will
669-
// block forever.
669+
// noop if already started.
670670
if err := w.listener.Start(); err != nil {
671671
slog.ErrorContext(w.ctx, "error starting listener", "error", err, "consumer_id", w.consumerID)
672672
if canceled := w.sleepWithCancel(2 * time.Second); canceled {

workers/scaleset/scaleset_listener.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ import (
2525
"github.com/cloudbase/garm/util/github/scalesets"
2626
)
2727

28+
var closed = make(chan struct{})
29+
30+
func init() { close(closed) }
31+
2832
func newListener(ctx context.Context, scaleSetHelper scaleSetHelper) *scaleSetListener {
2933
return &scaleSetListener{
3034
ctx: ctx,
@@ -278,11 +282,11 @@ func (l *scaleSetListener) loop() {
278282

279283
func (l *scaleSetListener) Wait() <-chan struct{} {
280284
l.mux.Lock()
285+
defer l.mux.Unlock()
286+
281287
if !l.running {
282288
slog.DebugContext(l.ctx, "scale set listener is not running")
283-
l.mux.Unlock()
284-
return nil
289+
return closed
285290
}
286-
l.mux.Unlock()
287291
return l.loopExited
288292
}

0 commit comments

Comments
 (0)