$ the-wire · showcase
net/http aborts writes on dead connections, breaks solaris fuzz test
By RepoJournal · Filed · About Go
net/http now aborts in-flight response writes when the connection dies, fixing a Solaris hang, while a removed test skip breaks the solaris builder.
net/http on Oracle Solaris used to leak handlers blocked writing a response after the client disconnected: once a read consumed the socket's pending error, poll(2) only reported POLLIN, so writes stalled forever. The new commit [1] aborts in-flight response writes when the connection dies, so handlers fail fast instead of hanging. Separately, a test-skip regression broke the solaris builder: CL 822464 removed the [short] skip, and since there are no solaris longtest builders, the breakage shipped unnoticed until now; the test is skipped again when !fuzz [2]. Also in net/http, the server no longer accepts a bare LF to terminate trailer lines, and it now closes the connection after invalid trailers, even when the handler enabled full duplex [3]. cmd/go's arm64 assembler now recognizes all load/store pair opcodes, so large offsets expand via literal pool constants instead of failing with "constant is not in pool" [4]. gomote adds `ssh <cmd>` and `scp` subcommands for remote builder access [5].
Action items
References
- [1] net/http: abort in-flight response writes when the connection dies ↗ golang/go
- [2] cmd/go: skip TestScript/test_fuzz_modcache when !fuzz ↗ golang/go
- [3] net/http: close connection after invalid trailers (including bare LF) ↗ golang/go
- [4] cmd/internal/obj/arm64: handle large offsets in load/store pairs ↗ golang/go
- [5] gomote: add ssh <cmd> and scp ↗ golang/build