nh2 / nh2/hatrace

Properly cleanup processes in case of conduit failing with an exception

Open
#80 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Haskell
Stars
126
Forks
26
PR merge metrics
No merged PRs in 30d

Description

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).

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.