mfplat: Cleanup user queues.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a23e658a01
commit
48b713efab
|
@ -254,29 +254,6 @@ static HRESULT lock_user_queue(DWORD queue)
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT unlock_user_queue(DWORD queue)
|
|
||||||
{
|
|
||||||
HRESULT hr = MF_E_INVALID_WORKQUEUE;
|
|
||||||
struct queue_handle *entry;
|
|
||||||
|
|
||||||
if (!(queue & MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK))
|
|
||||||
return S_OK;
|
|
||||||
|
|
||||||
EnterCriticalSection(&queues_section);
|
|
||||||
entry = get_queue_obj(queue);
|
|
||||||
if (entry && entry->refcount)
|
|
||||||
{
|
|
||||||
if (--entry->refcount == 0)
|
|
||||||
{
|
|
||||||
entry->obj = next_free_user_queue;
|
|
||||||
next_free_user_queue = entry;
|
|
||||||
}
|
|
||||||
hr = S_OK;
|
|
||||||
}
|
|
||||||
LeaveCriticalSection(&queues_section);
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void shutdown_queue(struct queue *queue)
|
static void shutdown_queue(struct queue *queue)
|
||||||
{
|
{
|
||||||
struct work_item *item, *item2;
|
struct work_item *item, *item2;
|
||||||
|
@ -299,6 +276,31 @@ static void shutdown_queue(struct queue *queue)
|
||||||
DeleteCriticalSection(&queue->cs);
|
DeleteCriticalSection(&queue->cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT unlock_user_queue(DWORD queue)
|
||||||
|
{
|
||||||
|
HRESULT hr = MF_E_INVALID_WORKQUEUE;
|
||||||
|
struct queue_handle *entry;
|
||||||
|
|
||||||
|
if (!(queue & MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK))
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
EnterCriticalSection(&queues_section);
|
||||||
|
entry = get_queue_obj(queue);
|
||||||
|
if (entry && entry->refcount)
|
||||||
|
{
|
||||||
|
if (--entry->refcount == 0)
|
||||||
|
{
|
||||||
|
shutdown_queue((struct queue *)entry->obj);
|
||||||
|
heap_free(entry->obj);
|
||||||
|
entry->obj = next_free_user_queue;
|
||||||
|
next_free_user_queue = entry;
|
||||||
|
}
|
||||||
|
hr = S_OK;
|
||||||
|
}
|
||||||
|
LeaveCriticalSection(&queues_section);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
void shutdown_system_queues(void)
|
void shutdown_system_queues(void)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
Loading…
Reference in New Issue