From: Mark Spencer Date: Sun, 10 Aug 2003 00:01:48 +0000 (+0000) Subject: Wait for mpg123 to die X-Git-Tag: 0.5.0~211 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=45bdf4053497d1618f4afdca82f0ec06452e2841;p=thirdparty%2Fasterisk.git Wait for mpg123 to die git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1285 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index d99d8bd498..e1ae942e76 100755 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -574,13 +574,22 @@ static void load_moh_classes(void) static void ast_moh_destroy(void) { struct mohclass *moh; + char buff[8192]; + int bytes, tbytes, stime = 0; if (option_verbose > 1) ast_verbose(VERBOSE_PREFIX_2 "Destroying any remaining musiconhold processes\n"); ast_pthread_mutex_lock(&moh_lock); moh = mohclasses; while(moh) { if (moh->pid) { - kill(moh->pid, SIGKILL); + ast_log(LOG_DEBUG, "killing %d!\n", moh->pid); + stime = time(NULL); + kill(moh->pid, SIGABRT); + while (bytes = read(moh->srcfd, buff, 8192) && time(NULL) < stime + 5) { + tbytes = tbytes + bytes; + } + ast_log(LOG_DEBUG, "mpg123 pid %d and child died after %d bytes read\n", moh->pid, tbytes); + close(moh->srcfd); moh->pid = 0; } moh = moh->next;