[glib/glib-2-22] Close the socket event in finalizer instead of in close method
- From: Tor Lillqvist <tml src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/glib-2-22] Close the socket event in finalizer instead of in close method
- Date: Sun, 14 Mar 2010 09:52:57 +0000 (UTC)
commit ccc815e9345d3d7a977ac23d89bd9162755c92ab
Author: Thomas Kristensen <thomas k kristensen tandberg com>
Date: Sun Mar 14 11:47:17 2010 +0200
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>
gio/gsocket.c | 14 ++++++--------
1 files changed, 6 insertions(+), 8 deletions(-)
---
diff --git a/gio/gsocket.c b/gio/gsocket.c
index 826938a..6bf1a80 100644
--- a/gio/gsocket.c
+++ b/gio/gsocket.c
@@ -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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]