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,
while (TRUE)
{
win32_unset_event_mask (socket, FD_ACCEPT);
if ((ret = accept (socket->priv->fd, NULL, 0)) < 0)
{
int errsv = get_socket_errno ();
......@@ -2727,6 +2725,8 @@ g_socket_accept (GSocket *socket,
errsv == EAGAIN)
#endif
{
win32_unset_event_mask (socket, FD_ACCEPT);
if (socket->priv->blocking)
{
if (!g_socket_condition_wait (socket,
......@@ -2743,6 +2743,8 @@ g_socket_accept (GSocket *socket,
break;
}
win32_unset_event_mask (socket, FD_ACCEPT);
#ifdef G_OS_WIN32
{
/* The socket inherits the accepting sockets event mask and even object,
......@@ -2834,8 +2836,6 @@ g_socket_connect (GSocket *socket,
while (1)
{
win32_unset_event_mask (socket, FD_CONNECT);
if (connect (socket->priv->fd, &buffer.sa,
g_socket_address_get_native_size (address)) < 0)
{
......@@ -2850,6 +2850,8 @@ g_socket_connect (GSocket *socket,
if (errsv == WSAEWOULDBLOCK)
#endif
{
win32_unset_event_mask (socket, FD_CONNECT);
if (socket->priv->blocking)
{
if (g_socket_condition_wait (socket, G_IO_OUT, cancellable, error))
......@@ -2875,6 +2877,8 @@ g_socket_connect (GSocket *socket,
break;
}
win32_unset_event_mask (socket, FD_CONNECT);
socket->priv->connected_read = TRUE;
socket->priv->connected_write = TRUE;
......@@ -3068,8 +3072,6 @@ g_socket_receive_with_timeout (GSocket *socket,
while (1)
{
win32_unset_event_mask (socket, FD_READ);
if ((ret = recv (socket->priv->fd, buffer, size, 0)) < 0)
{
int errsv = get_socket_errno ();
......@@ -3084,6 +3086,8 @@ g_socket_receive_with_timeout (GSocket *socket,
errsv == EAGAIN)
#endif
{
win32_unset_event_mask (socket, FD_READ);
if (timeout != 0)
{
if (!block_on_timeout (socket, G_IO_IN, timeout, start_time,
......@@ -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"));
return -1;
}
win32_unset_event_mask (socket, FD_READ);
break;
}
......@@ -3263,8 +3271,6 @@ g_socket_send_with_timeout (GSocket *socket,
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)
{
int errsv = get_socket_errno ();
......@@ -3279,6 +3285,8 @@ g_socket_send_with_timeout (GSocket *socket,
errsv == EAGAIN)
#endif
{
win32_unset_event_mask (socket, FD_WRITE);
if (timeout != 0)
{
if (!block_on_timeout (socket, G_IO_OUT, timeout, start_time,
......@@ -4755,8 +4763,6 @@ g_socket_send_message_with_timeout (GSocket *socket,
while (1)
{
win32_unset_event_mask (socket, FD_WRITE);
if (address)
result = WSASendTo (socket->priv->fd,
bufs, num_vectors,
......@@ -4778,6 +4784,8 @@ g_socket_send_message_with_timeout (GSocket *socket,
if (errsv == WSAEWOULDBLOCK)
{
win32_unset_event_mask (socket, FD_WRITE);
if (timeout != 0)
{
if (!block_on_timeout (socket, G_IO_OUT, timeout,
......@@ -5225,8 +5233,6 @@ g_socket_receive_message_with_timeout (GSocket *socket,
/* do it */
while (1)
{
win32_unset_event_mask (socket, FD_READ);
addrlen = sizeof addr;
if (address)
result = WSARecvFrom (socket->priv->fd,
......@@ -5248,6 +5254,8 @@ g_socket_receive_message_with_timeout (GSocket *socket,
if (errsv == WSAEWOULDBLOCK)
{
win32_unset_event_mask (socket, FD_READ);
if (timeout != 0)
{
if (!block_on_timeout (socket, G_IO_IN, timeout,
......@@ -5261,6 +5269,7 @@ g_socket_receive_message_with_timeout (GSocket *socket,
socket_set_error_lazy (error, errsv, _("Error receiving message: %s"));
return -1;
}
win32_unset_event_mask (socket, FD_READ);
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