Module: wine Branch: master Commit: 7551b82cca1240375ccdd0f3d574851efe3d70b9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7551b82cca1240375ccdd0f3d5...
Author: Rob Shearman robertshearman@gmail.com Date: Mon Jul 14 08:08:03 2008 +0100
rpcrt4: Implement RpcCancelThreadEx.
Implement RpcCancelThreadEx using existing code moved into a new function, rpc_ccancel_thread.
Implement RpcCancelThread based on RpcCancelThreadEx with timeout of 0.
---
dlls/rpcrt4/rpcrt4_main.c | 36 ++++++++++++++++++++++++------------ 1 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/dlls/rpcrt4/rpcrt4_main.c b/dlls/rpcrt4/rpcrt4_main.c index f70892c..1f0b1bb 100644 --- a/dlls/rpcrt4/rpcrt4_main.c +++ b/dlls/rpcrt4/rpcrt4_main.c @@ -968,20 +968,10 @@ NDR_SCONTEXT RPCRT4_PopThreadContextHandle(void) return context_handle; }
-/****************************************************************************** - * RpcCancelThread (rpcrt4.@) - */ -RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle) +static RPC_STATUS rpc_cancel_thread(DWORD target_tid) { - DWORD target_tid; struct threaddata *tdata;
- TRACE("(%p)\n", ThreadHandle); - - target_tid = GetThreadId(ThreadHandle); - if (!target_tid) - return RPC_S_INVALID_ARG; - EnterCriticalSection(&threaddata_cs); LIST_FOR_EACH_ENTRY(tdata, &threaddata_list, struct threaddata, entry) if (tdata->thread_id == target_tid) @@ -997,10 +987,32 @@ RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle) }
/****************************************************************************** + * RpcCancelThread (rpcrt4.@) + */ +RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle) +{ + TRACE("(%p)\n", ThreadHandle); + return RpcCancelThreadEx(ThreadHandle, 0); +} + +/****************************************************************************** * RpcCancelThreadEx (rpcrt4.@) */ RPC_STATUS RPC_ENTRY RpcCancelThreadEx(void* ThreadHandle, LONG Timeout) { + DWORD target_tid; + FIXME("(%p, %d)\n", ThreadHandle, Timeout); - return RPC_S_OK; + + target_tid = GetThreadId(ThreadHandle); + if (!target_tid) + return RPC_S_INVALID_ARG; + + if (Timeout) + { + FIXME("(%p, %d)\n", ThreadHandle, Timeout); + return RPC_S_OK; + } + else + return rpc_cancel_thread(target_tid); }