Make Process#wait asynchronous on Windows#13908
Merged
straight-shoota merged 2 commits intocrystal-lang:masterfrom Oct 28, 2023
Merged
Make Process#wait asynchronous on Windows#13908straight-shoota merged 2 commits intocrystal-lang:masterfrom
Process#wait asynchronous on Windows#13908straight-shoota merged 2 commits intocrystal-lang:masterfrom
Conversation
|
|
||
| # at the moment only `::Process#wait` uses a non-nil completion key; all | ||
| # I/O operations, including socket ones, do not set this field | ||
| case completion_key = Pointer(Void).new(entry.lpCompletionKey).as(CompletionKey?) |
Member
There was a problem hiding this comment.
I suppose it's probably okay to leverage the fact that unions of a reference type and Nil are represented as a simple pointer where the null pointe rexpresses a nil value. But it feels just a tiny bit iffy.
Feel free to ignore this comment, or refactor for a more explicit null pointer check if you think it makes sense.
Contributor
Author
There was a problem hiding this comment.
Yeah this is the same assumption in Atomic and Box. Perhaps these special casts can be placed under something like Crystal::ABI later
straight-shoota
approved these changes
Oct 27, 2023
Blacksmoke16
pushed a commit
to Blacksmoke16/crystal
that referenced
this pull request
Dec 11, 2023
1 task
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.
Fixes #13492.
Every
Crystal::System::Processnow carries a Win32 job object that holds the process handle (but not its child processes). The job object then indicates process termination via an IOCP message, which Crystal's event loop already employs. Note that those messages have their own format and do not have a realLibC::OVERLAPPED.This also effectively makes the playground work on Windows.
Does not affect #13425.