[svn-commits] russell: branch 1.4 r165661 - /branches/1.4/res/res_musiconhold.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Dec 18 12:52:18 CST 2008


Author: russell
Date: Thu Dec 18 12:52:18 2008
New Revision: 165661

URL: http://svn.digium.com/view/asterisk?view=rev&rev=165661
Log:
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)

Modified:
    branches/1.4/res/res_musiconhold.c

Modified: branches/1.4/res/res_musiconhold.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/res/res_musiconhold.c?view=diff&rev=165661&r1=165660&r2=165661
==============================================================================
--- branches/1.4/res/res_musiconhold.c (original)
+++ branches/1.4/res/res_musiconhold.c Thu Dec 18 12:52:18 2008
@@ -485,6 +485,7 @@
 			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 {
@@ -566,11 +567,11 @@
 				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
@@ -1178,11 +1179,11 @@
 			/* 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) < stime)
 				tbytes = tbytes + bytes;
 			ast_log(LOG_DEBUG, "mpg123 pid %d and child died after %d bytes read\n", pid, tbytes);




More information about the svn-commits mailing list