fix(stdune): preserve Windows flock handles and errors#15528
Open
rgrinberg wants to merge 1 commit into
Open
Conversation
Handle_val dereferences an OCaml custom block and must not be evaluated after releasing the runtime. Reacquiring the runtime can also overwrite the thread-local Windows last-error value from LockFileEx or UnlockFileEx. Extract each handle while holding the runtime and save GetLastError immediately after a failed system call. Signed-off-by: Rudi Grinberg <me@rgrinberg.com>
Member
Author
|
@nojb could you double check that this makes sense? It looks plausible to me, but I don't have enough winapi experience to make a judgement. |
nojb
approved these changes
Jul 18, 2026
nojb
left a comment
Collaborator
There was a problem hiding this comment.
LGTM, but I don't think it is necessary to preserve GetLastError() (it should already be preserved by caml_acquire_runtime_system(), same as errno.
| ok = LockFileEx(fd, dwFlags, 0, MAXDWORD, MAXDWORD, &overlapped); | ||
| if (!ok) { | ||
| error = GetLastError(); | ||
| } |
Collaborator
There was a problem hiding this comment.
I believe caml_acquire_runtime_system() expressively preserves errno/GetLastError(), so there is no need for this pirouette. See ocaml/ocaml#10220.
Member
Author
|
Good to know, thanks. |
Collaborator
Note that the other change, moving |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Handle_val dereferences an OCaml custom block and must not be evaluated
after releasing the runtime. Reacquiring the runtime can also overwrite
the thread-local Windows last-error value from LockFileEx or
UnlockFileEx.
Extract each handle while holding the runtime and save GetLastError
immediately after a failed system call.