From 0a1cf6621067c4a85b519c8cad5c345c29017f89 Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Thu, 25 Aug 2011 22:06:40 +0200 Subject: [PATCH] ffplay: fix a crash caused by aborting the video queue If the video queue is aborted, we have to pop the pending ALLOC event or wait for the allocation to complete, because the current code assumes that VideoState->pictq_windex does not change until the allocation is complete. Signed-off-by: Michael Niedermayer --- ffplay.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ffplay.c b/ffplay.c index 8d22b48ae5..27dda94e20 100644 --- a/ffplay.c +++ b/ffplay.c @@ -1356,6 +1356,12 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_ while (!vp->allocated && !is->videoq.abort_request) { SDL_CondWait(is->pictq_cond, is->pictq_mutex); } + /* if the queue is aborted, we have to pop the pending ALLOC event or wait for the allocation to complete */ + if (is->videoq.abort_request && SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_EVENTMASK(FF_ALLOC_EVENT)) != 1) { + while (!vp->allocated) { + SDL_CondWait(is->pictq_cond, is->pictq_mutex); + } + } SDL_UnlockMutex(is->pictq_mutex); if (is->videoq.abort_request)