Skip to content
  • Douglas Wilson's avatar
    Fix busy-wait in SysTools.builderMainLoop · 194384f1
    Douglas Wilson authored and Ben Gamari's avatar Ben Gamari committed
    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
    194384f1