Commit 9e89749e authored by Silvio Lazzeretti's avatar Silvio Lazzeretti

Partially revert "GSocket: Fix race conditions on Win32 if multiple threads...

Partially revert "GSocket: Fix race conditions on Win32 if multiple threads are waiting on conditions for the same socket"

This partially reverts commit 799f8dcd.
This patch seems to break the writability status of the server socket: once
somebody writes to it with success, then it reports it is not writable
anymore. Also, when the client socket has the flag FD_CONNECT set once,
it is never cleared and then it reports it is always writable, also when
it is not.
parent ac0706aa
...@@ -2711,8 +2711,6 @@ g_socket_accept (GSocket *socket, ...@@ -2711,8 +2711,6 @@ g_socket_accept (GSocket *socket,
while (TRUE) while (TRUE)
{ {
win32_unset_event_mask (socket, FD_ACCEPT);
if ((ret = accept (socket->priv->fd, NULL, 0)) < 0) if ((ret = accept (socket->priv->fd, NULL, 0)) < 0)
{ {
int errsv = get_socket_errno (); int errsv = get_socket_errno ();
...@@ -2727,6 +2725,8 @@ g_socket_accept (GSocket *socket, ...@@ -2727,6 +2725,8 @@ g_socket_accept (GSocket *socket,
errsv == EAGAIN) errsv == EAGAIN)
#endif #endif
{ {
win32_unset_event_mask (socket, FD_ACCEPT);
if (socket->priv->blocking) if (socket->priv->blocking)
{ {
if (!g_socket_condition_wait (socket, if (!g_socket_condition_wait (socket,
...@@ -2743,6 +2743,8 @@ g_socket_accept (GSocket *socket, ...@@ -2743,6 +2743,8 @@ g_socket_accept (GSocket *socket,
break; break;
} }
win32_unset_event_mask (socket, FD_ACCEPT);
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
{ {
/* The socket inherits the accepting sockets event mask and even object, /* The socket inherits the accepting sockets event mask and even object,
...@@ -2834,8 +2836,6 @@ g_socket_connect (GSocket *socket, ...@@ -2834,8 +2836,6 @@ g_socket_connect (GSocket *socket,
while (1) while (1)
{ {
win32_unset_event_mask (socket, FD_CONNECT);
if (connect (socket->priv->fd, &buffer.sa, if (connect (socket->priv->fd, &buffer.sa,
g_socket_address_get_native_size (address)) < 0) g_socket_address_get_native_size (address)) < 0)
{ {
...@@ -2850,6 +2850,8 @@ g_socket_connect (GSocket *socket, ...@@ -2850,6 +2850,8 @@ g_socket_connect (GSocket *socket,
if (errsv == WSAEWOULDBLOCK) if (errsv == WSAEWOULDBLOCK)
#endif #endif
{ {
win32_unset_event_mask (socket, FD_CONNECT);
if (socket->priv->blocking) if (socket->priv->blocking)
{ {
if (g_socket_condition_wait (socket, G_IO_OUT, cancellable, error)) if (g_socket_condition_wait (socket, G_IO_OUT, cancellable, error))
...@@ -2875,6 +2877,8 @@ g_socket_connect (GSocket *socket, ...@@ -2875,6 +2877,8 @@ g_socket_connect (GSocket *socket,
break; break;
} }
win32_unset_event_mask (socket, FD_CONNECT);
socket->priv->connected_read = TRUE; socket->priv->connected_read = TRUE;
socket->priv->connected_write = TRUE; socket->priv->connected_write = TRUE;
...@@ -3068,8 +3072,6 @@ g_socket_receive_with_timeout (GSocket *socket, ...@@ -3068,8 +3072,6 @@ g_socket_receive_with_timeout (GSocket *socket,
while (1) while (1)
{ {
win32_unset_event_mask (socket, FD_READ);
if ((ret = recv (socket->priv->fd, buffer, size, 0)) < 0) if ((ret = recv (socket->priv->fd, buffer, size, 0)) < 0)
{ {
int errsv = get_socket_errno (); int errsv = get_socket_errno ();
...@@ -3084,6 +3086,8 @@ g_socket_receive_with_timeout (GSocket *socket, ...@@ -3084,6 +3086,8 @@ g_socket_receive_with_timeout (GSocket *socket,
errsv == EAGAIN) errsv == EAGAIN)
#endif #endif
{ {
win32_unset_event_mask (socket, FD_READ);
if (timeout != 0) if (timeout != 0)
{ {
if (!block_on_timeout (socket, G_IO_IN, timeout, start_time, if (!block_on_timeout (socket, G_IO_IN, timeout, start_time,
...@@ -3094,10 +3098,14 @@ g_socket_receive_with_timeout (GSocket *socket, ...@@ -3094,10 +3098,14 @@ g_socket_receive_with_timeout (GSocket *socket,
} }
} }
win32_unset_event_mask (socket, FD_READ);
socket_set_error_lazy (error, errsv, _("Error receiving data: %s")); socket_set_error_lazy (error, errsv, _("Error receiving data: %s"));
return -1; return -1;
} }
win32_unset_event_mask (socket, FD_READ);
break; break;
} }
...@@ -3263,8 +3271,6 @@ g_socket_send_with_timeout (GSocket *socket, ...@@ -3263,8 +3271,6 @@ g_socket_send_with_timeout (GSocket *socket,
while (1) while (1)
{ {
win32_unset_event_mask (socket, FD_WRITE);
if ((ret = send (socket->priv->fd, (const char *)buffer, size, G_SOCKET_DEFAULT_SEND_FLAGS)) < 0) if ((ret = send (socket->priv->fd, (const char *)buffer, size, G_SOCKET_DEFAULT_SEND_FLAGS)) < 0)
{ {
int errsv = get_socket_errno (); int errsv = get_socket_errno ();
...@@ -3279,6 +3285,8 @@ g_socket_send_with_timeout (GSocket *socket, ...@@ -3279,6 +3285,8 @@ g_socket_send_with_timeout (GSocket *socket,
errsv == EAGAIN) errsv == EAGAIN)
#endif #endif
{ {
win32_unset_event_mask (socket, FD_WRITE);
if (timeout != 0) if (timeout != 0)
{ {
if (!block_on_timeout (socket, G_IO_OUT, timeout, start_time, if (!block_on_timeout (socket, G_IO_OUT, timeout, start_time,
...@@ -4755,8 +4763,6 @@ g_socket_send_message_with_timeout (GSocket *socket, ...@@ -4755,8 +4763,6 @@ g_socket_send_message_with_timeout (GSocket *socket,
while (1) while (1)
{ {
win32_unset_event_mask (socket, FD_WRITE);
if (address) if (address)
result = WSASendTo (socket->priv->fd, result = WSASendTo (socket->priv->fd,
bufs, num_vectors, bufs, num_vectors,
...@@ -4778,6 +4784,8 @@ g_socket_send_message_with_timeout (GSocket *socket, ...@@ -4778,6 +4784,8 @@ g_socket_send_message_with_timeout (GSocket *socket,
if (errsv == WSAEWOULDBLOCK) if (errsv == WSAEWOULDBLOCK)
{ {
win32_unset_event_mask (socket, FD_WRITE);
if (timeout != 0) if (timeout != 0)
{ {
if (!block_on_timeout (socket, G_IO_OUT, timeout, if (!block_on_timeout (socket, G_IO_OUT, timeout,
...@@ -5225,8 +5233,6 @@ g_socket_receive_message_with_timeout (GSocket *socket, ...@@ -5225,8 +5233,6 @@ g_socket_receive_message_with_timeout (GSocket *socket,
/* do it */ /* do it */
while (1) while (1)
{ {
win32_unset_event_mask (socket, FD_READ);
addrlen = sizeof addr; addrlen = sizeof addr;
if (address) if (address)
result = WSARecvFrom (socket->priv->fd, result = WSARecvFrom (socket->priv->fd,
...@@ -5248,6 +5254,8 @@ g_socket_receive_message_with_timeout (GSocket *socket, ...@@ -5248,6 +5254,8 @@ g_socket_receive_message_with_timeout (GSocket *socket,
if (errsv == WSAEWOULDBLOCK) if (errsv == WSAEWOULDBLOCK)
{ {
win32_unset_event_mask (socket, FD_READ);
if (timeout != 0) if (timeout != 0)
{ {
if (!block_on_timeout (socket, G_IO_IN, timeout, if (!block_on_timeout (socket, G_IO_IN, timeout,
...@@ -5261,6 +5269,7 @@ g_socket_receive_message_with_timeout (GSocket *socket, ...@@ -5261,6 +5269,7 @@ g_socket_receive_message_with_timeout (GSocket *socket,
socket_set_error_lazy (error, errsv, _("Error receiving message: %s")); socket_set_error_lazy (error, errsv, _("Error receiving message: %s"));
return -1; return -1;
} }
win32_unset_event_mask (socket, FD_READ);
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment