summaryrefslogtreecommitdiff
path: root/compiler/iface/TcIface.hs
diff options
context:
space:
mode:
authorDouglas Wilson <douglas.wilson@gmail.com>2017-07-20 08:48:12 -0400
committerBen Gamari <ben@smart-cactus.org>2017-07-20 08:48:13 -0400
commit194384f1318e0553e0c5ce621ca0903b55862eb3 (patch)
tree349d79c464898c26049ea05e290b0eb8a2d626fd /compiler/iface/TcIface.hs
parenta85a5959d2c00dff609e5945787803423bf3423e (diff)
downloadhaskell-194384f1318e0553e0c5ce621ca0903b55862eb3.tar.gz
Fix busy-wait in SysTools.builderMainLoop
Test T13701 was failing sporadically. The problem manifested while the test was run on a system under load. Profiling showed the increased allocations were in SysTools.builderMainLoop.loop, during calls to the assembler. This was due to loop effectively busy-waiting from when both stdin and stderr handles were closed, until getProcessExitCode succeeded. This is fixed by removing exit code handling from loop. We now wait for loop to finish, then read the exit code with waitForProcess. Some exception safety is added: the readerProc threads will now be killed and the handles will be closed if an exception is thrown. A TODO saying that threads dying is not accounted for is removed. I believe that this case is handled by readerProc sending EOF in a finally clause. Test Plan: Replicate test failures using procedure on the ticket, verify that they do not occur with this patch. Reviewers: austin, bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie GHC Trac Issues: #13987 Differential Revision: https://phabricator.haskell.org/D3748
Diffstat (limited to 'compiler/iface/TcIface.hs')
0 files changed, 0 insertions, 0 deletions