Sync to Wine-0_9_5:
Robert Shearman <rob(a)codeweavers.com>
- rpcrt4: Fix race condition in RpcServerListen.
The DontWait parameter is used for forcing the function not to wait
for the server to finish.
- rpcrt4: Implement callback conformance.
Modified: trunk/reactos/lib/rpcrt4/ndr_marshall.c
Modified: trunk/reactos/lib/rpcrt4/rpc_server.c
_____
Modified: trunk/reactos/lib/rpcrt4/ndr_marshall.c
--- trunk/reactos/lib/rpcrt4/ndr_marshall.c 2006-01-06 20:21:22 UTC
(rev 20623)
+++ trunk/reactos/lib/rpcrt4/ndr_marshall.c 2006-01-06 20:24:26 UTC
(rev 20624)
@@ -375,9 +375,17 @@
ptr = *(LPVOID*)ptr;
break;
case RPC_FC_CALLBACK:
+ {
+ unsigned char *old_stack_top = pStubMsg->StackTop;
+ pStubMsg->StackTop = ptr;
+
/* ofs is index into StubDesc->apfnExprEval */
- FIXME("handle callback\n");
+ TRACE("callback conformance into apfnExprEval[%d]\n", ofs);
+ pStubMsg->StubDesc->apfnExprEval[ofs](pStubMsg);
+
+ pStubMsg->StackTop = old_stack_top;
goto finish_conf;
+ }
default:
break;
}
_____
Modified: trunk/reactos/lib/rpcrt4/rpc_server.c
--- trunk/reactos/lib/rpcrt4/rpc_server.c 2006-01-06 20:21:22 UTC
(rev 20623)
+++ trunk/reactos/lib/rpcrt4/rpc_server.c 2006-01-06 20:24:26 UTC
(rev 20624)
@@ -989,6 +989,9 @@
status = RPCRT4_start_listen(FALSE);
+ if (status == RPC_S_OK)
+ RPCRT4_sync_with_server_thread();
+
if (DontWait || (status != RPC_S_OK)) return status;
return RpcMgmtWaitServerListen();
@@ -1010,8 +1013,6 @@
LeaveCriticalSection(&listen_cs);
- RPCRT4_sync_with_server_thread();
-
return RPC_S_OK;
}
Show replies by date