mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
fix(agent/agentcontainers): ensure proper channel closure for updateTrigger (#18631)
This commit is contained in:
committed by
GitHub
parent
6d305df67d
commit
b4aa643dfa
@ -421,12 +421,17 @@ func (api *API) updaterLoop() {
|
|||||||
// advancing the clock.
|
// advancing the clock.
|
||||||
ticker := api.clock.TickerFunc(api.ctx, api.updateInterval, func() error {
|
ticker := api.clock.TickerFunc(api.ctx, api.updateInterval, func() error {
|
||||||
done := make(chan error, 1)
|
done := make(chan error, 1)
|
||||||
defer close(done)
|
var sent bool
|
||||||
|
defer func() {
|
||||||
|
if !sent {
|
||||||
|
close(done)
|
||||||
|
}
|
||||||
|
}()
|
||||||
select {
|
select {
|
||||||
case <-api.ctx.Done():
|
case <-api.ctx.Done():
|
||||||
return api.ctx.Err()
|
return api.ctx.Err()
|
||||||
case api.updateTrigger <- done:
|
case api.updateTrigger <- done:
|
||||||
|
sent = true
|
||||||
err := <-done
|
err := <-done
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
@ -455,6 +460,7 @@ func (api *API) updaterLoop() {
|
|||||||
// Note that although we pass api.ctx here, updateContainers
|
// Note that although we pass api.ctx here, updateContainers
|
||||||
// has an internal timeout to prevent long blocking calls.
|
// has an internal timeout to prevent long blocking calls.
|
||||||
done <- api.updateContainers(api.ctx)
|
done <- api.updateContainers(api.ctx)
|
||||||
|
close(done)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -798,12 +804,19 @@ func (api *API) RefreshContainers(ctx context.Context) (err error) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
done := make(chan error, 1)
|
done := make(chan error, 1)
|
||||||
|
var sent bool
|
||||||
|
defer func() {
|
||||||
|
if !sent {
|
||||||
|
close(done)
|
||||||
|
}
|
||||||
|
}()
|
||||||
select {
|
select {
|
||||||
case <-api.ctx.Done():
|
case <-api.ctx.Done():
|
||||||
return xerrors.Errorf("API closed: %w", api.ctx.Err())
|
return xerrors.Errorf("API closed: %w", api.ctx.Err())
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return ctx.Err()
|
return ctx.Err()
|
||||||
case api.updateTrigger <- done:
|
case api.updateTrigger <- done:
|
||||||
|
sent = true
|
||||||
select {
|
select {
|
||||||
case <-api.ctx.Done():
|
case <-api.ctx.Done():
|
||||||
return xerrors.Errorf("API closed: %w", api.ctx.Err())
|
return xerrors.Errorf("API closed: %w", api.ctx.Err())
|
||||||
|
Reference in New Issue
Block a user