Robert Shearman <rob@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.
svn path=/trunk/; revision=20624
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;
}
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();
LeaveCriticalSection(&listen_cs);
- RPCRT4_sync_with_server_thread();
-
return RPC_S_OK;
}