diff options
author | David Timber <dxdt@dev.snart.me> | 2025-06-07 15:17:44 +0900 |
---|---|---|
committer | David Timber <dxdt@dev.snart.me> | 2025-06-07 18:59:44 +0900 |
commit | 81ce016400d4f367480faefbb878e7d6345b605c (patch) | |
tree | 23b63b6536fe0bfd143adf8b76c5b3c727fd18b0 /src/mmfwd-callam.cpp | |
parent | 1f1c4fa80a7bb091287782d50f48cd1c02ec6b8d (diff) |
Fix mmfwd-callam ...calls
- fix fd leak in open_playback()
- fix proc leak
Diffstat (limited to 'src/mmfwd-callam.cpp')
-rw-r--r-- | src/mmfwd-callam.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/mmfwd-callam.cpp b/src/mmfwd-callam.cpp index 3104dd7..22765cf 100644 --- a/src/mmfwd-callam.cpp +++ b/src/mmfwd-callam.cpp @@ -125,10 +125,12 @@ bool open_playback (void) { pid_t pid[2] = { -1, -1 }; int fd_in[2] = { -1, -1 }; int fd_out[2] = { -1, -1 }; - int blackhole; + int blackhole = -1; + int saved_errno = errno; fr = pipe(p); if (fr < 0) { + saved_errno = errno; perror(ARGV0 ": pipe()"); goto ERR; } @@ -142,6 +144,7 @@ bool open_playback (void) { fr = pipe(p); if (fr < 0) { + saved_errno = errno; perror(ARGV0 ": pipe()"); goto ERR; } @@ -150,6 +153,7 @@ bool open_playback (void) { pid[i] = do_playback_exec(p[0], blackhole); if (pid[i] < 0) { + saved_errno = errno; goto ERR; } @@ -166,13 +170,17 @@ bool open_playback (void) { assert(fr == 0); } + close(blackhole); return true; ERR: // house-keeping + close(blackhole); for (size_t i = 0; i < 2; i += 1) { close(fd_in[i]); close(fd_out[i]); - kill(pid[i], SIGHUP); + kill(pid[i], SIGKILL); } + + errno = saved_errno; return false; } |