[Bug 3777] Calling closesocket() will not eject any accept()s waiting in blocking mode...

Wine Bugs wine-bugs at winehq.org
Wed May 10 04:17:25 CDT 2006


http://bugs.winehq.org/show_bug.cgi?id=3777





------- Additional Comments From m.goemmel at 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


-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list