On Tue, 1 Apr 2025 05:57:55 GMT, David Holmes <dhol...@openjdk.org> wrote:
> See bug report for gory details. > > Short version: in the Windows version of `VirtualMachineImpl::execute`, if an > exception occurred after we created the `SocketInputStreamImpl` (which is the > test scenario of the failing test), we would close the native `HANDLE` to the > pipe twice. But after the first close the `HANDLE` could be reassigned to > another object (e.g. the `_ParkHandle` of the `StreamPumper` thread) and the > second close would close that `HANDLE` resulting in the failure of > `WaitForSingleObject`. (Other failure modes with different invalid handles > have also been seen.) > > Fix: shorten the outer try/catch block so that we only directly close the > pipe if the `IOException` happens before we create the `SocketStreamImpl` - > after which the closing of the stream will close the pipe `HANDLE`. > > Testing: > - ran the com/sun/tools/attach tets group 2500 times without failure > - tiers 3-5 as a sanity check (Windows only) > > Thanks Excellent to have this found, they just looked like an "impossible" failures. 8-) Also good lessons in naming and commenting around processCompletionStatus. ------------- Marked as reviewed by kevinw (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/24346#pullrequestreview-2732025593