[rpcrt4] Properly created named pipes
rob at codeweavers.com
Tue Jan 17 04:56:27 CST 2006
Thomas Weidenmueller wrote:
>Robert Shearman wrote:
>>I have a patch that converts rpcrt4 over to using overlapped I/O, but I
>>didn't submit it because the performance on Wine is horrible. When using
>>overlapped I/O we have to perform several more server calls than when
>>using non-overlapped I/O. Also, I think that this patch is incorrect
>>because if you want to make the pipe overlapped then you have to fix up
>>all of the ReadFile calls to take an OVERLAPPED structure.
>That's true, the ReadFile calls would also have to use the OVERLAPPED
>structure, but that would only work if the pipes were created with the
>PIPE_NOWAIT flag. Otherwise ReadFile and WriteFile will (or better
>should) be still synchronous regardless of the FILE_FLAG_OVERLAPPED flag.
>>I'll shortly be starting a rewrite of part of the RPC server so that we
>>can support more transports and I'll bear this bug in mind when I do it
>>and I'll try to fix it. The solution I come to will probably involve a
>>worker thread doing the ConnectNamedPipe.
>I hope the code gets fixed before the next wine release, because rpcrt4
>currently deadlocks (or should deadlock) when starting a server (at
>least in ROS/Win).
If what you say is true about the PIPE_NOWAIT flag affecting this then
it should be easy to fix.
>P.S. With WINE 0.9.5's implementation I noticed a massive thread leak on
>server-side (one thread per request?), is this a known bug?
No. I'm pretty sure that the code works correctly and doesn't leak
threads in Wine. If you can get a backtrace of the threads that
shouldn't be around then I might be able to determine what is going wrong.
More information about the wine-devel