Rob Shearman : rpcrt4: Implement RpcCancelThreadEx.

Alexandre Julliard julliard at winehq.org
Mon Jul 14 05:57:13 CDT 2008


Module: wine
Branch: master
Commit: 7551b82cca1240375ccdd0f3d574851efe3d70b9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7551b82cca1240375ccdd0f3d574851efe3d70b9

Author: Rob Shearman <robertshearman at 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);
 }




More information about the wine-cvs mailing list