Ticket #5766 (closed bug: fixed)
Asynchronous exception bugs in readProcess and readProcessWithExitCode
| Reported by: | basvandijk | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | 7.6.1 |
| Component: | libraries/process | Version: | 7.2.2 |
| Keywords: | Cc: | ||
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | None/Unknown | Difficulty: | Unknown |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
As explained on the libraries list, I fixed two asynchronous exception bugs in readProcess and readProcessWithExitCode:
1) If an asynchronous exception was thrown to the thread executing readProcess/readProcessWithExitCode somewhere after createProcess was executed, the standard handles would not be closed anymore resulting in a "handle leak" so to speak.
This is fixed by catching exceptions in the IO processing code and closing the standard handles when an exception occurs. Additionally, I also terminate the process and wait for its termination. Does the latter make sense?
2) If an asynchronous exception was thrown to the stdout/stderr-read-thread it did not execute the putMVar anymore resulting in a dead-lock when takeMVar was executed.
This is fixed by properly catching exception in the read-thread and propagating them to the parent thread which will then handle them as described above.

