rtworkq: Add RtwqCancelWorkItem().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
e9e087fdbb
commit
b8f94f7ef5
|
@ -465,6 +465,33 @@ static HRESULT queue_submit_wait(struct queue *queue, HANDLE event, LONG priorit
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT queue_cancel_item(struct queue *queue, RTWQWORKITEM_KEY key)
|
||||
{
|
||||
HRESULT hr = RTWQ_E_NOT_FOUND;
|
||||
struct work_item *item;
|
||||
|
||||
EnterCriticalSection(&queue->cs);
|
||||
LIST_FOR_EACH_ENTRY(item, &queue->pending_items, struct work_item, entry)
|
||||
{
|
||||
if (item->key == key)
|
||||
{
|
||||
key >>= 32;
|
||||
if ((key & WAIT_ITEM_KEY_MASK) == WAIT_ITEM_KEY_MASK)
|
||||
CloseThreadpoolWait(item->u.wait_object);
|
||||
else if ((key & SCHEDULED_ITEM_KEY_MASK) == SCHEDULED_ITEM_KEY_MASK)
|
||||
CloseThreadpoolTimer(item->u.timer_object);
|
||||
else
|
||||
WARN("Unknown item key mask %#x.\n", (DWORD)key);
|
||||
queue_release_pending_item(item);
|
||||
hr = S_OK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&queue->cs);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
struct async_result
|
||||
{
|
||||
RTWQASYNCRESULT result;
|
||||
|
@ -724,6 +751,19 @@ HRESULT WINAPI RtwqPutWaitingWorkItem(HANDLE event, LONG priority, IRtwqAsyncRes
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT WINAPI RtwqCancelWorkItem(RTWQWORKITEM_KEY key)
|
||||
{
|
||||
struct queue *queue;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%s.\n", wine_dbgstr_longlong(key));
|
||||
|
||||
if (FAILED(hr = grab_queue(RTWQ_CALLBACK_QUEUE_TIMER, &queue)))
|
||||
return hr;
|
||||
|
||||
return queue_cancel_item(queue, key);
|
||||
}
|
||||
|
||||
HRESULT WINAPI RtwqLockWorkQueue(DWORD queue)
|
||||
{
|
||||
TRACE("%#x.\n", queue);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
@ stub RtwqBeginUnregisterWorkQueueWithMMCSS
|
||||
@ stub RtwqCancelDeadline
|
||||
@ stub RtwqCancelMultipleWaitingWorkItem
|
||||
@ stub RtwqCancelWorkItem
|
||||
@ stdcall RtwqCancelWorkItem(int64)
|
||||
@ stdcall RtwqCreateAsyncResult(ptr ptr ptr ptr)
|
||||
@ stub RtwqEndRegisterWorkQueueWithMMCSS
|
||||
@ stub RtwqEndUnregisterWorkQueueWithMMCSS
|
||||
|
|
|
@ -75,6 +75,7 @@ cpp_quote(" DWORD dwBytesTransferred;")
|
|||
cpp_quote(" HANDLE hEvent;")
|
||||
cpp_quote("} RTWQASYNCRESULT;")
|
||||
|
||||
cpp_quote("HRESULT WINAPI RtwqCancelWorkItem(RTWQWORKITEM_KEY key);")
|
||||
cpp_quote("HRESULT WINAPI RtwqCreateAsyncResult(IUnknown *object, IRtwqAsyncCallback *callback, IUnknown *state, IRtwqAsyncResult **result);")
|
||||
cpp_quote("HRESULT WINAPI RtwqLockPlatform(void);")
|
||||
cpp_quote("HRESULT WINAPI RtwqLockWorkQueue(DWORD queue);")
|
||||
|
|
Loading…
Reference in New Issue