Module: wine Branch: master Commit: 73a68b065bec473719d7bcbcdb7387161bbff7e1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=73a68b065bec473719d7bcbcdb...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Mar 25 23:36:46 2015 +0300
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 {