Author: fireball
Date: Fri Jan 11 16:13:05 2008
New Revision: 31715
URL:
http://svn.reactos.org/svn/reactos?rev=31715&view=rev
Log:
- Apply adapted patch by Damjan Jovanovic <damjan.jov(a)gmail.com> "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.
Modified:
trunk/reactos/dll/win32/rpcrt4_new/rpc_server.c
trunk/reactos/dll/win32/rpcrt4_new/rpc_transport.c
trunk/reactos/dll/win32/rpcrt4_new/rpcrt4_ros.diff
Modified: trunk/reactos/dll/win32/rpcrt4_new/rpc_server.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rpcrt4_new/rpc_s…
==============================================================================
--- trunk/reactos/dll/win32/rpcrt4_new/rpc_server.c (original)
+++ trunk/reactos/dll/win32/rpcrt4_new/rpc_server.c Fri Jan 11 16:13:05 2008
@@ -1019,7 +1019,7 @@
*/
RPC_STATUS WINAPI RpcMgmtWaitServerListen( void )
{
- TRACE("()\n");
+ RpcServerProtseq *cps;
EnterCriticalSection(&listen_cs);
@@ -1027,10 +1027,18 @@
LeaveCriticalSection(&listen_cs);
return RPC_S_NOT_LISTENING;
}
-
+
+ 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);
-
- FIXME("not waiting for server calls to finish\n");
return RPC_S_OK;
}
Modified: trunk/reactos/dll/win32/rpcrt4_new/rpc_transport.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rpcrt4_new/rpc_t…
==============================================================================
--- trunk/reactos/dll/win32/rpcrt4_new/rpc_transport.c (original)
+++ trunk/reactos/dll/win32/rpcrt4_new/rpc_transport.c Fri Jan 11 16:13:05 2008
@@ -375,7 +375,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;
@@ -400,7 +400,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;
Modified: trunk/reactos/dll/win32/rpcrt4_new/rpcrt4_ros.diff
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rpcrt4_new/rpcrt…
==============================================================================
--- trunk/reactos/dll/win32/rpcrt4_new/rpcrt4_ros.diff (original)
+++ trunk/reactos/dll/win32/rpcrt4_new/rpcrt4_ros.diff Fri Jan 11 16:13:05 2008
@@ -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;