On Sat, 18 Aug 2001, Daniel Walker wrote:
Ove Kaaven wrote:
On Fri, 17 Aug 2001, Daniel Walker wrote:
This fixes the problem that I'm seeing .. Any version of Bearshare seem
to be effected ..
Well, this is not a correct patch of course (but you probably already knew that), but if this fixes something, I'd like to know what and why, as sock_reselect should never do a poll() unless sock->state is set, and sock->state should (in theory) not be set before a connect() or listen() is done on the socket. Do a --debugmsg +server,+winsock, please?
From the trace it looks like sock->state is set the WD_FD_NONBLOCKING . enable_socket_event() set's the sock->state to non-blocking then calls sock_reselect.
Aha. Then you'd probably want something like this, then?
Index: server/sock.c =================================================================== RCS file: /home/wine/wine/server/sock.c,v retrieving revision 1.18 diff -u -r1.18 sock.c --- server/sock.c 2001/05/14 20:09:39 1.18 +++ server/sock.c 2001/08/18 15:00:53 @@ -84,7 +84,7 @@
if (sock->obj.select == -1) { /* previously unconnected socket, is this reselect supposed to connect it? */ - if (!sock->state) return; + if (!(sock->state & ~WS_FD_NONBLOCKING)) return; /* ok, it is, attach it to the wineserver's main poll loop */ add_select_user( &sock->obj ); }