From: Alistair Leslie-Hughes Subject: [PATCH 3/3] dpnet: Implement IDirectPlay8Thread Initialize Message-Id: Date: Fri, 11 Nov 2016 07:02:47 +0000 In-Reply-To: <20161111070158.8684-1-leslie_alistair@hotmail.com> References: <20161111070158.8684-1-leslie_alistair@hotmail.com> Signed-off-by: Alistair Leslie-Hughes --- dlls/dpnet/dpnet_private.h | 4 ++++ dlls/dpnet/tests/thread.c | 4 ++-- dlls/dpnet/threadpool.c | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/dlls/dpnet/dpnet_private.h b/dlls/dpnet/dpnet_private.h index 41313d1..48aceb6 100644 --- a/dlls/dpnet/dpnet_private.h +++ b/dlls/dpnet/dpnet_private.h @@ -125,6 +125,10 @@ struct IDirectPlay8LobbiedApplicationImpl struct IDirectPlay8ThreadPoolImpl { IDirectPlay8ThreadPool IDirectPlay8ThreadPool_iface; + + PFNDPNMESSAGEHANDLER msghandler; + DWORD flags; + void *usercontext; }; /** diff --git a/dlls/dpnet/tests/thread.c b/dlls/dpnet/tests/thread.c index 561178f..2e7e951 100644 --- a/dlls/dpnet/tests/thread.c +++ b/dlls/dpnet/tests/thread.c @@ -54,13 +54,13 @@ static void create_threadpool(void) ok(hr == S_OK, "got 0x%08x\n", hr); hr = IDirectPlay8ThreadPool_Initialize(pool1, NULL, NULL, 0); - todo_wine ok(hr == DPNERR_INVALIDPARAM, "got 0x%08x\n", hr); + ok(hr == DPNERR_INVALIDPARAM, "got 0x%08x\n", hr); hr = IDirectPlay8ThreadPool_Initialize(pool1, NULL, &DirectPlayThreadHandler, 0); ok(hr == S_OK, "got 0x%08x\n", hr); hr = IDirectPlay8ThreadPool_Initialize(pool2, NULL, &DirectPlayThreadHandler, 0); - todo_wine ok(hr == DPNERR_ALREADYINITIALIZED, "got 0x%08x\n", hr); + ok(hr == DPNERR_ALREADYINITIALIZED, "got 0x%08x\n", hr); hr = IDirectPlay8ThreadPool_GetThreadCount(pool1, -1, &threadcnt, 0); ok(hr == S_OK, "got 0x%08x\n", hr); diff --git a/dlls/dpnet/threadpool.c b/dlls/dpnet/threadpool.c index 3ce9731..01ad73d 100644 --- a/dlls/dpnet/threadpool.c +++ b/dlls/dpnet/threadpool.c @@ -76,7 +76,19 @@ static ULONG WINAPI IDirectPlay8ThreadPoolImpl_Release(IDirectPlay8ThreadPool *i static HRESULT WINAPI IDirectPlay8ThreadPoolImpl_Initialize(IDirectPlay8ThreadPool *iface, void * const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) { - FIXME("(%p)->(%p,%p,%x): stub\n", iface, pvUserContext, pfn, dwFlags); + IDirectPlay8ThreadPoolImpl *This = impl_from_IDirectPlay8ThreadPool(iface); + TRACE("(%p)->(%p,%p,%x): stub\n", iface, pvUserContext, pfn, dwFlags); + + if(!pfn) + return DPNERR_INVALIDPARAM; + + if(This->msghandler) + return DPNERR_ALREADYINITIALIZED; + + This->msghandler = pfn; + This->flags = dwFlags; + This->usercontext = pvUserContext; + return DPN_OK; } @@ -137,6 +149,9 @@ static IDirectPlay8ThreadPool *get_threadpool(void) return NULL; obj->IDirectPlay8ThreadPool_iface.lpVtbl = &DirectPlay8ThreadPool_Vtbl; + obj->msghandler = NULL; + obj->flags = 0; + obj->usercontext = NULL; if (InterlockedCompareExchangePointer((void**)&threadpool, &obj->IDirectPlay8ThreadPool_iface, NULL)) HeapFree(GetProcessHeap(), 0, obj); -- 2.10.2