You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Close the read stream before the writer-flush wait: the reader's stdout
drain is what unwedges a server blocked writing, so a wedged writer's
flush can now complete instead of burning the flush window (on trio the
aborted send also truncated an accepted message mid-line).
- Run the reader's drain phase shielded and on raw bytes: caller
cancellation no longer skips the drain (which got well-behaved servers
spuriously tree-killed), and a dying server flushing non-UTF-8 output
can no longer abort shutdown with a decode error.
- Re-check returncode when the grace wait times out, so a server dying in
the final poll interval is not spuriously escalated.
- Release the subprocess transport by duck type, not isinstance: uvloop's
transport is not an asyncio.SubprocessTransport, so the deterministic
fd release silently no-op'd there. Tolerate PermissionError from the
close (Python <= 3.12 re-kills a setuid child without catching it).
- Log killpg EPERM at warning, not error: macOS raises EPERM for groups
containing only unreaped zombies, i.e. a cleanly exited server.
- Test teardown tolerates EPERM from killpg (same macOS zombie case), and
the interaction test's outer deadline now exceeds the grace period it
configures. New regression tests pin each behavioral fix.
- Document the terminate_posix_process_tree group-leader requirement and
the win32 utilities logger rename in the migration guide.
0 commit comments