From: Nikolay Sivov nsivov@codeweavers.com
--- dlls/rtworkq/queue.c | 9 ++++----- dlls/rtworkq/tests/rtworkq.c | 7 +++++-- 2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/dlls/rtworkq/queue.c b/dlls/rtworkq/queue.c index 031da94ca43..144feb98c55 100644 --- a/dlls/rtworkq/queue.c +++ b/dlls/rtworkq/queue.c @@ -307,14 +307,13 @@ static struct queue system_queues[SYS_QUEUE_COUNT];
static struct queue *get_system_queue(DWORD queue_id) { + if (RTWQ_CALLBACK_QUEUE_PRIVATE_MASK & queue_id) + return NULL; + switch (queue_id) { default: - if (!(RTWQ_CALLBACK_QUEUE_PRIVATE_MASK & queue_id)) - return NULL; - /* fall through */ - case RTWQ_CALLBACK_QUEUE_UNDEFINED: - /* Works in native Windows. Undocumented, but seems to use standard. */ + /* Use standard queue for undefined system queue id's. */ queue_id = RTWQ_CALLBACK_QUEUE_STANDARD; /* fall through */ case RTWQ_CALLBACK_QUEUE_STANDARD: diff --git a/dlls/rtworkq/tests/rtworkq.c b/dlls/rtworkq/tests/rtworkq.c index e6930083e8f..7655275d721 100644 --- a/dlls/rtworkq/tests/rtworkq.c +++ b/dlls/rtworkq/tests/rtworkq.c @@ -270,18 +270,21 @@ static void test_undefined_queue_id(void) ok(res == 0, "got %#lx\n", res); ok(callback_result == result, "Expected result %p, got %p.\n", result, callback_result);
- hr = RtwqPutWorkItem(RTWQ_CALLBACK_QUEUE_PRIVATE_MASK, 0, result); + hr = RtwqPutWorkItem(0xffff, 0, result); ok(hr == S_OK, "got %#lx\n", hr); res = wait_async_callback_result(&test_callback->IRtwqAsyncCallback_iface, 100, &callback_result); ok(res == 0, "got %#lx\n", res); ok(callback_result == result, "Expected result %p, got %p.\n", result, callback_result);
- hr = RtwqPutWorkItem(RTWQ_CALLBACK_QUEUE_PRIVATE_MASK & (RTWQ_CALLBACK_QUEUE_PRIVATE_MASK - 1), 0, result); + hr = RtwqPutWorkItem(0x4000, 0, result); ok(hr == S_OK, "got %#lx\n", hr); res = wait_async_callback_result(&test_callback->IRtwqAsyncCallback_iface, 100, &callback_result); ok(res == 0, "got %#lx\n", res); ok(callback_result == result, "Expected result %p, got %p.\n", result, callback_result);
+ hr = RtwqPutWorkItem(0x10000, 0, result); + ok(hr == RTWQ_E_INVALID_WORKQUEUE, "got %#lx\n", hr); + IRtwqAsyncResult_Release(result);
IRtwqAsyncCallback_Release(&test_callback->IRtwqAsyncCallback_iface);