Skip to content
  • Colin Walters's avatar
    gsubprocess: Fix up communicate · 0e1a3ee3
    Colin Walters authored and Allison Karlitskaya's avatar Allison Karlitskaya committed
    We weren't closing the streams after we were done reading or writing,
    which is kind of essential.  The easy way to fix this is to just use
    g_output_stream_splice() to a GMemoryOutputStream rather than
    hand-rolling it.  This results in a substantial reduction of code
    complexity.
    
    A second serious issue is that we were marking the task as complete when
    the process exits, but that's racy - there could still be data to read
    from stdout.  Fix this by just refcounting outstanding operations.
    
    This code, not surprisingly, looks a lot like the "multi" test.
    
    Next, because processes output binary data, I'd be forced to annotate
    the char*/length pairs as (array) (element-type uint8).  But rather than
    doing that, it's *far* simpler to just use GBytes.
    
    We need a version of this that actually validates as UTF-8, that will be
    in the next patch.
    0e1a3ee3