vlc | branch: master | Ilkka Ollakka <[email protected]> | Sat Apr 21 12:32:22 2018 +0300| [355ce920644185e0a1f418b8b6258aade128db93] | committer: Ilkka Ollakka
cache_block: fix regression on not refilling cache on read Regression from 9a725a039d8cfcf91aabad0101da1563a627493f. Tested by disabling pf_block-check in cache_block and renaming cache_read shortcut to cachexxx. Tip from Remi. Passes all make checks. ref #20306 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=355ce920644185e0a1f418b8b6258aade128db93 --- modules/stream_filter/cache_block.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/modules/stream_filter/cache_block.c b/modules/stream_filter/cache_block.c index 313cc45334..4c02fe7c99 100644 --- a/modules/stream_filter/cache_block.c +++ b/modules/stream_filter/cache_block.c @@ -184,24 +184,28 @@ static ssize_t AStreamReadBlock(stream_t *s, void *buf, size_t len) { stream_sys_t *sys = s->p_sys; - /* It means EOF */ - if (sys->cache.p_chain== NULL) - return 0; - ssize_t i_current = block_BytestreamRemaining( &sys->cache ); size_t i_copy = VLC_CLIP((size_t)i_current, 0, len); - /* Copy data */ - if( block_GetBytes( &sys->cache, buf, i_copy ) ) - return -1; - /** * we should not signal end-of-file if we have not exhausted - * the blocks we know about, as such we should try again if that - * is the case. i_copy == 0 just means that the processed block does + * the cache. i_copy == 0 just means that the cache currently does * not contain data at the offset that we want, not EOF. **/ + if( i_copy == 0 ) + { + /* Return EOF if we are unable to refill cache, most likely + * really EOF */ + if( AStreamRefillBlock(s) == VLC_EGENERIC ) + return 0; + } + + /* Copy data */ + if( block_GetBytes( &sys->cache, buf, i_copy ) ) + return -1; + + /* If we ended up on refill, try to read refilled cache */ if( i_copy == 0 && sys->cache.p_chain ) return AStreamReadBlock( s, buf, len ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
