Skip to content

Properly cleanup processes in case of conduit failing with an exception #80

@qrilka

Description

@qrilka

Tests in #76 uncovered that if an exception gets thrown in a hatrace conduit child processes don't get cleaned up correctly. Quoting @nh2 from discord:

...currently an exception being thrown and not caught from inside the Conduit will leak the tracee child process. That is because

genericSourceTraceForkExecvFullPathWithSink args getDetails sink = runInBoundThread $ do
  childPid <- liftIO $ forkExecvWithPtrace args

does not use any form of bracket.
What this needs is the same form of bracket that the sourceProcessWithStreams (https://hackage.haskell.org/package/conduit-extra-1.3.5/docs/Data-Conduit-Process.html#v:sourceProcessWithStreams) does:

If an exception is raised by any of the streams, the process is terminated.

It is not implemented because I haven't figured out exactly yet how to "just kill" a traced process. Maybe it's easy, but I am not sure.
We should certainly have an issue about it (currently we don't have yet).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions