(closes issue #13229)

Reported by: clegall_proformatique

Ensure that moh_generate does not return prematurely before local_ast_moh_stop is called. Also, the sleep in mp3_spawn now only occurs for http locations since it seems to have been added originally only for failing media streams.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@162874 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Jeff Peeler 17 years ago
parent f7521fb0db
commit 90efa9de78

@ -371,7 +371,7 @@ static int spawn_mp3(struct mohclass *class)
files = 1;
} else {
dir = opendir(class->dir);
if (!dir && !strstr(class->dir,"http://") && !strstr(class->dir,"HTTP://")) {
if (!dir && !strncasecmp(class->dir, "http://", 7)) {
ast_log(LOG_WARNING, "%s is not a valid directory\n", class->dir);
return -1;
}
@ -414,8 +414,7 @@ static int spawn_mp3(struct mohclass *class)
}
}
if (strstr(class->dir,"http://") || strstr(class->dir,"HTTP://")) {
if (!strncasecmp(class->dir, "http://", 7)) {
ast_copy_string(fns[files], class->dir, sizeof(fns[files]));
argv[argc++] = fns[files];
files++;
@ -446,7 +445,7 @@ static int spawn_mp3(struct mohclass *class)
close(fds[1]);
return -1;
}
if (time(NULL) - class->start < respawn_time) {
if (!strncasecmp(class->dir, "http://", 7) && time(NULL) - class->start < respawn_time) {
sleep(respawn_time - (time(NULL) - class->start));
}
@ -743,8 +742,9 @@ static int moh_generate(struct ast_channel *chan, void *data, int len, int sampl
short buf[1280 + AST_FRIENDLY_OFFSET / 2];
int res;
if (!moh->parent->pid)
if (!moh->parent->pid && moh->parent->inuse == 0) {
return -1;
}
len = ast_codec_get_len(moh->parent->format, samples);

Loading…
Cancel
Save