aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mmfwd-callam.cpp12
-rw-r--r--src/mmfwd/__init__.py13
2 files changed, 19 insertions, 6 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;
}
diff --git a/src/mmfwd/__init__.py b/src/mmfwd/__init__.py
index 2c34d99..480cc8e 100644
--- a/src/mmfwd/__init__.py
+++ b/src/mmfwd/__init__.py
@@ -2,6 +2,7 @@ from copy import copy
import datetime
import os
import re
+import signal
import subprocess
import sys
from typing import Any
@@ -327,12 +328,12 @@ class Application:
call.hangup(None, self.on_call_hangup, ud)
if ud.instance.callam_ringtone_proc is not None:
- ud.instance.callam_ringtone_proc.terminate()
+ os.killpg(ud.instance.callam_ringtone_proc.pid, signal.SIGKILL)
ud.instance.callam_ringtone_proc.wait()
ud.instance.callam_ringtone_proc = None
if ud.instance.callam_proc is not None:
- ud.instance.callam_proc.terminate()
+ os.killpg(ud.instance.callam_proc.pid, signal.SIGKILL)
ud.instance.callam_proc.wait()
ud.instance.callam_proc = None
@@ -368,7 +369,8 @@ class Application:
if ud.instance.callam.get('ringtone-exec'):
try:
ud.instance.callam_ringtone_proc = subprocess.Popen(
- ud.instance.callam['ringtone-exec'])
+ ud.instance.callam['ringtone-exec'],
+ start_new_session = True)
except Exception as e:
sys.stderr.write(e + os.linesep)
@@ -390,7 +392,10 @@ class Application:
env['MMFWD_CALLAM_PLAYBACK'] = str(ud.instance.callam['playback'])
exec = [ ud.instance.callam['exec'], "/dev/" + ud.audio_port, path ]
- ud.instance.callam_proc = subprocess.Popen(exec, env = env)
+ ud.instance.callam_proc = subprocess.Popen(
+ exec,
+ env = env,
+ start_new_session = True)
# 5 minutes timeout
ud.instance.callam_timer = GLib.timeout_add_seconds(
60 * 4,