Well. *that* deadlock bug has been lurking in seeking for a long time.
authorMonty <xiphmont@xiph.org>
Wed, 4 Jul 2007 05:13:33 +0000 (05:13 +0000)
committerMonty <xiphmont@xiph.org>
Wed, 4 Jul 2007 05:13:33 +0000 (05:13 +0000)
A bigger chunksize + just the right annodex file finally reproduced it
here.

svn path=/trunk/vorbis/; revision=13217

lib/vorbisfile.c

index e205f65..f5710e8 100644 (file)
@@ -511,12 +511,11 @@ static void _prefetch_all_headers(OggVorbis_File *vf, ogg_int64_t dataoffset){
            vorbis_comment_clear(vf->vc+i);
            break;
          }
-         if(ogg_page_serialno(&og)!=vf->serialnos[i])
-           continue;
-
-         if(ogg_page_granulepos(&og)!=-1){
-           vf->pcmlengths[i*2+1]=ogg_page_granulepos(&og)-vf->pcmlengths[i*2];
-           break;
+         if(ogg_page_serialno(&og)==vf->serialnos[i]){
+           if(ogg_page_granulepos(&og)!=-1){
+             vf->pcmlengths[i*2+1]=ogg_page_granulepos(&og)-vf->pcmlengths[i*2];
+             break;
+           }
          }
          vf->offset=ret;
        }
@@ -1356,7 +1355,7 @@ int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
                result=_seek_helper(vf,bisect);
                if(result) goto seek_error;
              }else{
-               end=result;
+               end=bisect;
                endtime=granulepos;
                break;
              }