http://bugs.winehq.org/show_bug.cgi?id=3777
------- Additional Comments From m.goemmel@compulab.de 2006-10-05 04:17 ------- Eric mailed me this some time ago, so I post it here before it gets totally lost:
the normal way of working is: - the client references an object in the server (thru a windows-socket, which is in fact a server handle) - the server in its object references the unix-socket (fd)
however, some wait operations are done in the client by: - retrieving from the server the unix-fd - waiting on that unix-fd
what happens in your case is: - server has a unix-fd opened on the socket - client get one copy of the unix-fd (to wait on) - client blocks on it (select) - another thread (client) closes the windows-socket - another thread closes the handle (from socket) - server is called, and object is destroyed in server, hence closing the unix- fd (from server)
at this point, - the windows object in server for the socket is destroyed - but the unix object (in unix kernel) is not destroyed as there's still a reference to it (thru a unix-fd) (the one used in the select)
Thanks
Markus