diff --git a/reactos/dll/win32/rpcrt4/rpc_server.c b/reactos/dll/win32/rpcrt4/rpc_server.c index 34c71c78c5c..02d13988e24 100644 --- a/reactos/dll/win32/rpcrt4/rpc_server.c +++ b/reactos/dll/win32/rpcrt4/rpc_server.c @@ -1019,7 +1019,7 @@ RPC_STATUS WINAPI RpcServerListen( UINT MinimumCallThreads, UINT MaxCalls, UINT */ RPC_STATUS WINAPI RpcMgmtWaitServerListen( void ) { - TRACE("()\n"); + RpcServerProtseq *cps; EnterCriticalSection(&listen_cs); @@ -1027,10 +1027,18 @@ RPC_STATUS WINAPI RpcMgmtWaitServerListen( void ) LeaveCriticalSection(&listen_cs); return RPC_S_NOT_LISTENING; } - - LeaveCriticalSection(&listen_cs); - FIXME("not waiting for server calls to finish\n"); + do + { + LeaveCriticalSection(&listen_cs); + + LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry) + WaitForSingleObject(cps->server_ready_event, INFINITE); + + EnterCriticalSection(&listen_cs); + } while (!std_listen); + + LeaveCriticalSection(&listen_cs); return RPC_S_OK; } diff --git a/reactos/dll/win32/rpcrt4/rpc_transport.c b/reactos/dll/win32/rpcrt4/rpc_transport.c index b8e4ee91388..7665ef79358 100644 --- a/reactos/dll/win32/rpcrt4/rpc_transport.c +++ b/reactos/dll/win32/rpcrt4/rpc_transport.c @@ -375,7 +375,7 @@ static int rpcrt4_conn_np_read(RpcConnection *Connection, break; ret = GetOverlappedResult(npc->pipe, &npc->ovl[0], &bytes_read, TRUE); - if (!ret /*&& GetLastError() != ERROR_MORE_DATA*/) + if (!ret && GetLastError() != ERROR_MORE_DATA) break; bytes_left -= bytes_read; @@ -400,7 +400,7 @@ static int rpcrt4_conn_np_write(RpcConnection *Connection, break; ret = GetOverlappedResult(npc->pipe, &npc->ovl[1], &bytes_written, TRUE); - if (!ret /*&& GetLastError() != ERROR_MORE_DATA*/) + if (!ret && GetLastError() != ERROR_MORE_DATA) break; bytes_left -= bytes_written; diff --git a/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff b/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff index 2a76e462b92..c6b3943bd4a 100644 --- a/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff +++ b/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff @@ -1,5 +1,40 @@ ---- H:\Working Copies\wine\dlls\rpcrt4\rpc_transport.c Sun Jan 06 19:27:38 2008 -+++ H:\Working Copies\ReactOS\trunk\reactos\dll\win32\rpcrt4\rpc_transport.c Mon Jan 07 16:02:15 2008 +--- rpc_server.c Tue Jan 01 13:09:34 2008 ++++ rpc_server.c Fri Jan 11 15:58:57 2008 +@@ -1017,22 +1017,30 @@ + /*********************************************************************** + * RpcMgmtServerWaitListen (RPCRT4.@) + */ + RPC_STATUS WINAPI RpcMgmtWaitServerListen( void ) + { +- TRACE("()\n"); ++ RpcServerProtseq *cps; + + EnterCriticalSection(&listen_cs); + + if (!std_listen) { + LeaveCriticalSection(&listen_cs); + return RPC_S_NOT_LISTENING; + } + ++ do ++ { + LeaveCriticalSection(&listen_cs); + +- FIXME("not waiting for server calls to finish\n"); ++ LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry) ++ WaitForSingleObject(cps->server_ready_event, INFINITE); ++ ++ EnterCriticalSection(&listen_cs); ++ } while (!std_listen); ++ ++ LeaveCriticalSection(&listen_cs); + + return RPC_S_OK; + } + + /*********************************************************************** +--- rpc_transport.c Sun Jan 06 19:27:38 2008 ++++ rpc_transport.c Fri Jan 11 15:59:32 2008 @@ -54,10 +54,13 @@ #endif #ifdef HAVE_SYS_POLL_H @@ -127,7 +162,7 @@ break; + + ret = GetOverlappedResult(npc->pipe, &npc->ovl[0], &bytes_read, TRUE); -+ if (!ret /*&& GetLastError() != ERROR_MORE_DATA*/) ++ if (!ret && GetLastError() != ERROR_MORE_DATA) + break; + bytes_left -= bytes_read; @@ -148,7 +183,7 @@ break; + + ret = GetOverlappedResult(npc->pipe, &npc->ovl[1], &bytes_written, TRUE); -+ if (!ret /*&& GetLastError() != ERROR_MORE_DATA*/) ++ if (!ret && GetLastError() != ERROR_MORE_DATA) + break; + bytes_left -= bytes_written;