aboutsummaryrefslogtreecommitdiff
path: root/src/mmfwd-callam.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mmfwd-callam.cpp')
-rw-r--r--src/mmfwd-callam.cpp12
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;
}