Merged revisions 162874 via svnmerge from
authorJeff Peeler <jpeeler@digium.com>
Wed, 10 Dec 2008 22:11:46 +0000 (22:11 +0000)
committerJeff Peeler <jpeeler@digium.com>
Wed, 10 Dec 2008 22:11:46 +0000 (22:11 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r162874 | jpeeler | 2008-12-10 16:04:18 -0600 (Wed, 10 Dec 2008) | 5 lines

(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/trunk@162891 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_musiconhold.c

index 344f0e2..74bcb58 100644 (file)
@@ -414,7 +414,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;
                }
@@ -457,8 +457,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++;
@@ -489,7 +488,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));
        }
 
@@ -840,8 +839,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);