mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 04:13:34 +00:00
- Apply adapted patch by Damjan Jovanovic <[email protected]> "Make RpcMgmtWaitServerListen wait for the server to stop listening, like it is supposed to". Rob Shearman commented that "it prevented the dispatching of simultaneous RPCs on an endpoint", however it's enough for ReactOS for now, until a better patch is made.
- Uncomment commented out error checks. - Update rpcrt4_ros.diff accordingly. svn path=/trunk/; revision=31715
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user