Repository navigation
os: hold Windows file handles during Stat and readdir - #82528
Shubham-Padkonde wants to merge 1 commit into
Conversation
|
This PR (HEAD: 8eebe03) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/853965. Important tips:
|
|
Message from Gopher Robot: Patch Set 1: Congratulations on opening your first change. Thank you for your contribution! Next steps: Most changes in the Go project go through a few rounds of revision. This can be During May-July and Nov-Jan the Go project is in a code freeze, during which Please don’t reply on this GitHub thread. Visit golang.org/cl/853965. |
Stat and directory reads on Windows use the native handle without a
poll.FD reference. A concurrent Close can release that handle while the
operation is using it, and the handle may be reused for another file.
Calls after Close also expose native invalid-handle errors rather than
ErrClosed.
Hold the reference with RawControl for the entire operation. Pass the
held handle through directory initialization, buffer refills, and the
non-directory error check. Keep the File alive through the callback and
translate reference-acquisition errors through wrapErr.
Enable TestClosedStat on Windows and cover closed directory operations
before and after priming the directory buffer, plus Stat racing Close
with potential handle reuse. Directory-buffer retirement is separate
work tracked by #82292.
Validation on windows/amd64: os, internal/poll and
internal/syscall/windows pass in short mode; os and internal/poll also
pass with the race detector. The closed-handle regressions fail with
unchanged production source. Focused local tests pass ten repetitions.
The full src/all.bat run passes the affected packages but fails in SWIG
LTO execution and cmd/go. A baseline/fixed comparison reproduces the same
SWIG executable error, Strawberry patch assertions and pkg-config output
mismatch. Four tests interrupted by the full cmd/go deadline pass in
isolation on both versions. The full suite is not claimed to pass.
Focused validation:
https://github.com/Shubham-Padkonde/go/actions/runs/40290214159
Full suite:
https://github.com/Shubham-Padkonde/go/actions/runs/40291229025
Baseline/fixed comparison:
https://github.com/Shubham-Padkonde/go/actions/runs/40294367891
Fixes #82293