This is a first-person technical critique of how GNOME developers handled a vte regression that delayed the "child-exited" event and therefore prevented terminals from closing when the shell process ended. The author explains the core of the problem: standard output can remain open after a child exits when that child has spawned grandchildren, so end-of-stream (EOF) can arrive after child exit. A 2019 change started deferring the child-exited signal until EOF (initially indefinitely, then with 5s and 2s caps), which left terminals unable to know when to exit. The author provided a minimal fix three years ago: emit the child-exited signal immediately when the child exits. That fix was ignored, the issue was locked and censored, and users suffered until GNOME eventually shipped a different patch.
The post compares the two fixes in code and in behavior: the author's change simply emits the signal immediately, while GNOME’s later patch reads and processes up to ~64 KB from the PTY synchronously, optionally processes queued data, then emits the same signal. The author demonstrates, with videos and code excerpts, that both approaches end up emitting the signal at the same time and that the extra synchronous reading is unnecessary. The author documents procedural failures (failure to detect or revert the regression, refusal to consider a valid fix, locking the issue) and argues this combination of technical and social mistakes harmed users and risks repeated errors.
Summary generated by AI from the linked article. hn.today is not affiliated with Hacker News or Y Combinator.