From: Nikolay Sivov Subject: [PATCH 2/2] rpcrt4: Fix RpcMgmtStopServerListening() return value when we're not listening Message-Id: <55131FFC.1080600@codeweavers.com> Date: Wed, 25 Mar 2015 23:52:12 +0300 --- From e97352e04cab17b49c03c52d56dac9f143180cf9 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Wed, 25 Mar 2015 23:36:46 +0300 Subject: [PATCH 2/2] rpcrt4: Fix RpcMgmtStopServerListening() return value when we're not listening --- dlls/rpcrt4/rpc_server.c | 21 +++++++++++++++------ dlls/rpcrt4/tests/rpc.c | 4 ---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c index 4789d8a..1e22d03 100644 --- a/dlls/rpcrt4/rpc_server.c +++ b/dlls/rpcrt4/rpc_server.c @@ -762,9 +762,18 @@ static RPC_STATUS RPCRT4_start_listen(BOOL auto_listen) return status; } -static void RPCRT4_stop_listen(BOOL auto_listen) +static RPC_STATUS RPCRT4_stop_listen(BOOL auto_listen) { + RPC_STATUS status = RPC_S_OK; + EnterCriticalSection(&listen_cs); + + if (!std_listen) + { + status = RPC_S_NOT_LISTENING; + goto done; + } + if (auto_listen || (--manual_listen_count == 0)) { if (listen_count != 0 && --listen_count == 0) { @@ -779,12 +788,14 @@ static void RPCRT4_stop_listen(BOOL auto_listen) EnterCriticalSection(&listen_cs); if (listen_done_event) SetEvent( listen_done_event ); listen_done_event = 0; - LeaveCriticalSection(&listen_cs); - return; + goto done; } assert(listen_count >= 0); } + +done: LeaveCriticalSection(&listen_cs); + return status; } static BOOL RPCRT4_protseq_is_endpoint_registered(RpcServerProtseq *protseq, const char *endpoint) @@ -1560,9 +1571,7 @@ RPC_STATUS WINAPI RpcMgmtStopServerListening ( RPC_BINDING_HANDLE Binding ) return RPC_S_WRONG_KIND_OF_BINDING; } - RPCRT4_stop_listen(FALSE); - - return RPC_S_OK; + return RPCRT4_stop_listen(FALSE); } /*********************************************************************** diff --git a/dlls/rpcrt4/tests/rpc.c b/dlls/rpcrt4/tests/rpc.c index 85473f6..400756f 100644 --- a/dlls/rpcrt4/tests/rpc.c +++ b/dlls/rpcrt4/tests/rpc.c @@ -224,10 +224,8 @@ static void test_rpc_ncacn_ip_tcp(void) ok(status == RPC_S_OK, "return wrong\n"); status = RpcMgmtStopServerListening(NULL); -todo_wine { ok(status == RPC_S_NOT_LISTENING, "wrong RpcMgmtStopServerListening error (%u)\n", status); -} status = RpcMgmtWaitServerListen(); ok(status == RPC_S_NOT_LISTENING, @@ -244,9 +242,7 @@ todo_wine { ok(status == RPC_S_OK, "RpcServerRegisterIf failed (%u)\n", status); status = RpcServerListen(1, 20, TRUE); -todo_wine { ok(status == RPC_S_OK, "RpcServerListen failed (%u)\n", status); -} status = RpcServerListen(1, 20, TRUE); todo_wine { -- 2.1.4