vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Apr 12 10:26:38 2020 +0300| [cdabee2cab5f8124db1398aa80a4824eb8a5ea51] | committer: Rémi Denis-Courmont
prefetch: simplify w/o cancellation > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cdabee2cab5f8124db1398aa80a4824eb8a5ea51 --- modules/stream_filter/prefetch.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/modules/stream_filter/prefetch.c b/modules/stream_filter/prefetch.c index 3a28b9f770..c1786c539c 100644 --- a/modules/stream_filter/prefetch.c +++ b/modules/stream_filter/prefetch.c @@ -81,7 +81,6 @@ typedef struct static ssize_t ThreadRead(stream_t *stream, void *buf, size_t length) { stream_sys_t *sys = stream->p_sys; - int canc = vlc_savecancel(); vlc_mutex_unlock(&sys->lock); assert(length > 0); @@ -89,14 +88,12 @@ static ssize_t ThreadRead(stream_t *stream, void *buf, size_t length) ssize_t val = vlc_stream_ReadPartial(stream->s, buf, length); vlc_mutex_lock(&sys->lock); - vlc_restorecancel(canc); return val; } static int ThreadSeek(stream_t *stream, uint64_t seek_offset) { stream_sys_t *sys = stream->p_sys; - int canc = vlc_savecancel(); vlc_mutex_unlock(&sys->lock); @@ -105,7 +102,6 @@ static int ThreadSeek(stream_t *stream, uint64_t seek_offset) msg_Err(stream, "cannot seek (to offset %"PRIu64")", seek_offset); vlc_mutex_lock(&sys->lock); - vlc_restorecancel(canc); return (val == VLC_SUCCESS) ? 0 : -1; } @@ -113,7 +109,6 @@ static int ThreadSeek(stream_t *stream, uint64_t seek_offset) static int ThreadControl(stream_t *stream, int query, ...) { stream_sys_t *sys = stream->p_sys; - int canc = vlc_savecancel(); vlc_mutex_unlock(&sys->lock); @@ -125,7 +120,6 @@ static int ThreadControl(stream_t *stream, int query, ...) va_end(ap); vlc_mutex_lock(&sys->lock); - vlc_restorecancel(canc); return ret; } @@ -138,8 +132,7 @@ static void *Thread(void *data) vlc_interrupt_set(sys->interrupt); vlc_mutex_lock(&sys->lock); - mutex_cleanup_push(&sys->lock); - for (;;) + while (!vlc_killed()) { struct stream_ctrl *ctrl = sys->controls; @@ -266,8 +259,7 @@ static void *Thread(void *data) // sys->buffer_size); vlc_cond_signal(&sys->wait_data); } - vlc_assert_unreachable(); - vlc_cleanup_pop(); + vlc_mutex_unlock(&sys->lock); return NULL; } @@ -520,8 +512,11 @@ static void Close (vlc_object_t *obj) stream_t *stream = (stream_t *)obj; stream_sys_t *sys = stream->p_sys; - vlc_cancel(sys->thread); + vlc_mutex_lock(&sys->lock); vlc_interrupt_kill(sys->interrupt); + vlc_cond_signal(&sys->wait_space); + vlc_mutex_unlock(&sys->lock); + vlc_join(sys->thread, NULL); vlc_interrupt_destroy(sys->interrupt); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
