aboutsummaryrefslogtreecommitdiffstats
path: root/res
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-18 18:58:05 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-12-18 18:58:05 +0000
commit20df795262d55b31ec8b1c793e2a1ce45af6faae (patch)
treed58c2fa9016dbc1441276db65fd091d3f03e9cf8 /res
parent6b57591546cbc8e04981bc21477a3a234b35f9a7 (diff)
Merged revisions 165662 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r165662 | russell | 2008-12-18 12:54:47 -0600 (Thu, 18 Dec 2008) | 15 lines Merged revisions 165661 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r165661 | russell | 2008-12-18 12:52:18 -0600 (Thu, 18 Dec 2008) | 7 lines Set the process group ID on the MOH process so that all children will get killed (closes issue #14099) Reported by: caspy Patches: res_musiconhold.c.patch.killpg.try2 uploaded by caspy (license 645) ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@165664 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rw-r--r--res/res_musiconhold.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index e3f0594a8..2eb390dff 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -515,6 +515,7 @@ static int spawn_mp3(struct mohclass *class)
ast_log(LOG_WARNING, "chdir() failed: %s\n", strerror(errno));
_exit(1);
}
+ setpgid(0, getpid());
if (ast_test_flag(class, MOH_CUSTOM)) {
execv(argv[0], argv);
} else {
@@ -596,11 +597,11 @@ static void *monmp3thread(void *data)
class->srcfd = -1;
pthread_testcancel();
if (class->pid > 1) {
- kill(class->pid, SIGHUP);
+ killpg(class->pid, SIGHUP);
usleep(100000);
- kill(class->pid, SIGTERM);
+ killpg(class->pid, SIGTERM);
usleep(100000);
- kill(class->pid, SIGKILL);
+ killpg(class->pid, SIGKILL);
class->pid = 0;
}
} else {
@@ -1454,11 +1455,11 @@ static int ast_moh_destroy_one(struct mohclass *moh)
/* Back when this was just mpg123, SIGKILL was fine. Now we need
* to give the process a reason and time enough to kill off its
* children. */
- kill(pid, SIGHUP);
+ killpg(pid, SIGHUP);
usleep(100000);
- kill(pid, SIGTERM);
+ killpg(pid, SIGTERM);
usleep(100000);
- kill(pid, SIGKILL);
+ killpg(pid, SIGKILL);
while ((ast_wait_for_input(moh->srcfd, 100) > 0) && (bytes = read(moh->srcfd, buff, 8192)) && time(NULL) < stop_time)
tbytes = tbytes + bytes;
ast_debug(1, "mpg123 pid %d and child died after %d bytes read\n", pid, tbytes);