WIP: make waitForProcess async safe #204
Open
+52
−18
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.
Moving from fpco/typed-process#38. CC @NorfairKing
This PR is not complete, the tests fail. I'm trying to determine whether this is a reasonable approach. My understanding of the issue here:
waitForProcess
wants to allow the C FFI callc_waitForProcess
to be interruptible, so thatwaitpid
can be interruptedwaitpid
call with succeed, but the FFI call will throw an exception due to the async exceptionMVar
insideProcessHandle
believes that the handle is still open, allowing futurewaitForProcess
calls to occurMy best guess is that, in order to both allow
waitpid
to be interrupted and to reliably capture the exit code if it's generated, we need to:c_waitForProcess
, since those will be lost in the case of an async exceptionwaitpid
call succeeded or not by passing in anotherint*
(along with the existing output parameterpret
).c_waitForProcess
throws an exception, we need to update theMVar
with the exit code, if it's returned successfullyI've taken a stab at this in this PR. @simonmar I was hoping you could have a look and let me know if this approach works, and/or if there's a better way to attack this kind of problem.