PICARD-2722: Avoid pipe thread respawning on exit on Windows #2295
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.
Summary
Problem
Closing Picard on Windows can lead to an exception when closing the pipe while also have the pipe server thread still running. The reason is a race condition when sending the close message to the pipe. As the pipe gets recreated after it was read from it could happen that the pipe was running again before the application closed.
Solution
Only re-create the pipe if it was not marked as stopped. Also avoid exceptions when attempting to close the handle.
The second commit of this PR also solves a smaller problem, where on starting Picard under Windows there would always be a log output
This was caused by the attempt to write to the pipe, which is done for probing whether a process already has the pipe or not.