mfplat: Make sure async event delivery is triggered with EndGetEvent().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2019-06-07 16:09:01 +03:00 committed by Alexandre Julliard
parent 880559b2b4
commit 67bd377af2
1 changed files with 4 additions and 1 deletions

View File

@ -5982,6 +5982,7 @@ struct event_queue
CONDITION_VARIABLE update_event; CONDITION_VARIABLE update_event;
struct list events; struct list events;
BOOL is_shut_down; BOOL is_shut_down;
BOOL notified;
IMFAsyncResult *subscriber; IMFAsyncResult *subscriber;
}; };
@ -6105,9 +6106,10 @@ static HRESULT WINAPI eventqueue_GetEvent(IMFMediaEventQueue *iface, DWORD flags
static void queue_notify_subscriber(struct event_queue *queue) static void queue_notify_subscriber(struct event_queue *queue)
{ {
if (list_empty(&queue->events) || !queue->subscriber) if (list_empty(&queue->events) || !queue->subscriber || queue->notified)
return; return;
queue->notified = TRUE;
MFPutWorkItemEx(MFASYNC_CALLBACK_QUEUE_STANDARD, queue->subscriber); MFPutWorkItemEx(MFASYNC_CALLBACK_QUEUE_STANDARD, queue->subscriber);
} }
@ -6163,6 +6165,7 @@ static HRESULT WINAPI eventqueue_EndGetEvent(IMFMediaEventQueue *iface, IMFAsync
if (queue->subscriber) if (queue->subscriber)
IMFAsyncResult_Release(queue->subscriber); IMFAsyncResult_Release(queue->subscriber);
queue->subscriber = NULL; queue->subscriber = NULL;
queue->notified = FALSE;
hr = *event ? S_OK : E_FAIL; hr = *event ? S_OK : E_FAIL;
} }