Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Make Process.{Safe}Handle be a waitable event handle on Unix#36199

Merged
jkotas merged 1 commit intodotnet:masterfrom
stephentoub:safeprocesshandle
Mar 21, 2019
Merged

Make Process.{Safe}Handle be a waitable event handle on Unix#36199
jkotas merged 1 commit intodotnet:masterfrom
stephentoub:safeprocesshandle

Conversation

@stephentoub
Copy link
Copy Markdown
Member

The documentation for Process.{Safe}Handle state that its value can be used to initialize a SafeWaitHandle that can then be used with a method like WaitHandle.WaitAny. However, on Unix, the SafeProcessHandle we currently return from Process.SafeHandle just uses the process ID as its faux handle value, since on Unix there isn't actually an OS process handle that's waitable in this fashion.

We already have to manufacture a ManualResetEvent to serve as such a wait handle, though. as we use that for WaitForExit, raising the Exited event, and so on. As such, we can change SafeProcessHandle to be backed by that MRE's handle rather than by the process ID.

Fixes https://github.com/dotnet/corefx/issues/35544
cc: @tmds, @wtgodbe, @krwq

The documentation for Process.{Safe}Handle state that its value can be used to initialize a SafeWaitHandle that can then be used with a method like WaitHandle.WaitAny. However, on Unix, the SafeProcessHandle we currently return from Process.SafeHandle just uses the process ID as its faux handle value, since on Unix there isn't actually an OS process handle that's waitable in this fashion.

We already have to manufacture a ManualResetEvent to serve as such a wait handle, though. as we use that for WaitForExit, raising the Exited event, and so on.  As such, we can change SafeProcessHandle to be backed by that MRE's handle rather than by the process ID.
@jkotas jkotas merged commit 71122bb into dotnet:master Mar 21, 2019
@stephentoub stephentoub deleted the safeprocesshandle branch March 21, 2019 18:34
picenka21 pushed a commit to picenka21/runtime that referenced this pull request Feb 18, 2022
…corefx#36199)

The documentation for Process.{Safe}Handle state that its value can be used to initialize a SafeWaitHandle that can then be used with a method like WaitHandle.WaitAny. However, on Unix, the SafeProcessHandle we currently return from Process.SafeHandle just uses the process ID as its faux handle value, since on Unix there isn't actually an OS process handle that's waitable in this fashion.

We already have to manufacture a ManualResetEvent to serve as such a wait handle, though. as we use that for WaitForExit, raising the Exited event, and so on.  As such, we can change SafeProcessHandle to be backed by that MRE's handle rather than by the process ID.

Commit migrated from dotnet/corefx@71122bb
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants