Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9d1d607

Browse files
committed
fix(agent/agentcontainers): ensure proper channel closure for updateTrigger
1 parent abcf3df commit 9d1d607

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

agent/agentcontainers/api.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,12 +422,17 @@ func (api *API) updaterLoop() {
422422
// advancing the clock.
423423
ticker := api.clock.TickerFunc(api.ctx, api.updateInterval, func() error {
424424
done := make(chan error, 1)
425-
defer close(done)
426-
425+
var sent bool
426+
defer func() {
427+
if !sent {
428+
close(done)
429+
}
430+
}()
427431
select {
428432
case <-api.ctx.Done():
429433
return api.ctx.Err()
430434
case api.updateTrigger <- done:
435+
sent = true
431436
err := <-done
432437
if err != nil {
433438
if errors.Is(err, context.Canceled) {
@@ -456,6 +461,7 @@ func (api *API) updaterLoop() {
456461
// Note that although we pass api.ctx here, updateContainers
457462
// has an internal timeout to prevent long blocking calls.
458463
done <- api.updateContainers(api.ctx)
464+
close(done)
459465
}
460466
}
461467
}
@@ -800,12 +806,19 @@ func (api *API) RefreshContainers(ctx context.Context) (err error) {
800806
}()
801807

802808
done := make(chan error, 1)
809+
var sent bool
810+
defer func() {
811+
if !sent {
812+
close(done)
813+
}
814+
}()
803815
select {
804816
case <-api.ctx.Done():
805817
return xerrors.Errorf("API closed: %w", api.ctx.Err())
806818
case <-ctx.Done():
807819
return ctx.Err()
808820
case api.updateTrigger <- done:
821+
sent = true
809822
select {
810823
case <-api.ctx.Done():
811824
return xerrors.Errorf("API closed: %w", api.ctx.Err())

0 commit comments

Comments
 (0)