compose/cmd/display
Guillaume Lours 6d3d68c1fa fix(display): stop ttyWriter.Done from hanging after context cancel
Fixes #14114: Done() blocked forever once the render goroutine had
already exited via ctx.Done() (e.g. after SIGTERM), since it sent on an
unbuffered channel with nobody left to receive.

Closing the channel instead of sending never blocks, but a bare close()
panics the moment ttyWriter runs a second Start/Done cycle on the same
shared bus - which already happens today (run's nested create/start,
publish's nested push, rm --stop's sequential stop then remove). Start
now hands out a fresh, once-only-closable signal each cycle instead of
a single shared channel, and run/publish stop opening a redundant
nested bracket around calls already inside one.

Signed-off-by: Guillaume Lours <glours@users.noreply.github.com>
2026-08-25 11:38:50 +02:00
..
colors.go move progress UI components into cmd 2025-11-12 11:17:28 +01:00
dryrun.go make DRYRUN_PREFIX a display attribute, move DryRunClient out of pkg/api 2025-11-12 11:17:28 +01:00
json.go chore: explicit, unique, greppable names for internal identifiers 2026-08-20 11:17:11 +02:00
json_test.go golangci-lint: use gci formatter instead of goimports 2025-12-01 12:21:50 +01:00
mode.go cli: display.Mode always resolves to the mode actually rendered 2026-08-20 15:10:15 +02:00
plain.go next release will be major version v5.x 2025-11-13 09:32:43 +01:00
quiet.go next release will be major version v5.x 2025-11-13 09:32:43 +01:00
spinner.go move progress UI components into cmd 2025-11-12 11:17:28 +01:00
tty.go fix(display): stop ttyWriter.Done from hanging after context cancel 2026-08-25 11:38:50 +02:00
tty_test.go fix(display): stop ttyWriter.Done from hanging after context cancel 2026-08-25 11:38:50 +02:00