]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 331038 via svnmerge from
authorKinsey Moore <kmoore@digium.com>
Mon, 8 Aug 2011 20:53:30 +0000 (20:53 +0000)
committerKinsey Moore <kmoore@digium.com>
Mon, 8 Aug 2011 20:53:30 +0000 (20:53 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r331038 | kmoore | 2011-08-08 15:52:45 -0500 (Mon, 08 Aug 2011) | 11 lines

  In-queue MOH stops after a periodic announcement

  If the seek value is past the end of file when resuming G.722 MOH, MOH will
  cease to function for the duration of the MOH session through all starts and
  stops until saved state is cleared.  Adjusting the code to guarantee a single
  valid read (which is already assumed) fixes the bug.

  (closes issue ASTERISK-18077)
  Review: https://reviewboard.asterisk.org/r/1328/
Tested-by: Jonathan Rose <jrose@digium.com>
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@331039 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_musiconhold.c

index 4a052d43da79edc32ccc38a078a6b179887f2385..c2207d6ce368309c61b629eb50b8777e773ae665 100644 (file)
@@ -340,7 +340,16 @@ static int ast_moh_files_next(struct ast_channel *chan)
        ast_debug(1, "%s Opened file %d '%s'\n", chan->name, state->pos, state->class->filearray[state->pos]);
 
        if (state->samples) {
+               size_t loc;
+               /* seek *SHOULD* be good since it's from a known location */
                ast_seekstream(chan->stream, state->samples, SEEK_SET);
+               /* if the seek failed then recover because if there is not a valid read,
+                * moh_files_generate will return -1 and MOH will stop */
+               loc = ast_tellstream(chan->stream);
+               if (state->samples > loc && loc) {
+                       /* seek one sample from the end for one guaranteed valid read */
+                       ast_seekstream(chan->stream, 1, SEEK_END);
+               }
        }
 
        return 0;