diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mmfwd-callam.cpp | 12 | ||||
-rw-r--r-- | src/mmfwd/__init__.py | 13 |
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, |