Close the socket event in finalizer instead of in close method

There might be a GSource attached to a GMainContext, about to be removed by a
pending cancellation. Deleting the handle too early will trigger a g_warning in
the "select()" call in GMainContext. Attached patch fixes this by deferring
destruction of WSAEVENT object until GSocket's finalize().

Patch from bug #612702.

Signed-off-by: Tor Lillqvist <tml@iki.fi>
This commit is contained in:
Thomas Kristensen
2010-03-14 11:47:17 +02:00
committed by Tor Lillqvist
parent f01c4be9c4
commit ccc815e934

View File

@@ -614,6 +614,12 @@ g_socket_finalize (GObject *object)
g_socket_close (socket, NULL);
#ifdef G_OS_WIN32
if (socket->priv->event != WSA_INVALID_EVENT)
{
WSACloseEvent (socket->priv->event);
socket->priv->event = WSA_INVALID_EVENT;
}
g_assert (socket->priv->requested_conditions == NULL);
#endif
@@ -2002,14 +2008,6 @@ g_socket_close (GSocket *socket,
break;
}
#ifdef G_OS_WIN32
if (socket->priv->event != WSA_INVALID_EVENT)
{
WSACloseEvent (socket->priv->event);
socket->priv->event = WSA_INVALID_EVENT;
}
#endif
socket->priv->connected = FALSE;
socket->priv->closed = TRUE;