[libsoup: 3/5] soup-socket: add flag close_on_dispose to SoupSocket



commit f2753f27a1cd9059e7392f60c1d31c9c4df7bf65
Author: Dirkjan Ochtman <dirkjan ochtman nl>
Date:   Mon Jan 6 08:42:00 2014 -0500

    soup-socket: add flag close_on_dispose to SoupSocket
    
    https://bugzilla.gnome.org/show_bug.cgi?id=721343

 libsoup/soup-socket-private.h |    1 +
 libsoup/soup-socket.c         |   18 +++++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletions(-)
---
diff --git a/libsoup/soup-socket-private.h b/libsoup/soup-socket-private.h
index c0c8dca..fc6690a 100644
--- a/libsoup/soup-socket-private.h
+++ b/libsoup/soup-socket-private.h
@@ -9,6 +9,7 @@
 #include "soup-socket.h"
 
 #define SOUP_SOCKET_SOCKET_PROPERTIES "socket-properties"
+#define SOUP_SOCKET_CLOSE_ON_DISPOSE  "close-on-dispose"
 
 gboolean   soup_socket_connect_sync_internal   (SoupSocket           *sock,
                                                GCancellable         *cancellable,
diff --git a/libsoup/soup-socket.c b/libsoup/soup-socket.c
index 651e960..87671c1 100644
--- a/libsoup/soup-socket.c
+++ b/libsoup/soup-socket.c
@@ -58,6 +58,7 @@ enum {
        PROP_TRUSTED_CERTIFICATE,
        PROP_TLS_CERTIFICATE,
        PROP_TLS_ERRORS,
+       PROP_CLOSE_ON_DISPOSE,
        PROP_SOCKET_PROPERTIES,
 
        LAST_PROP
@@ -78,6 +79,7 @@ typedef struct {
        guint ssl_strict:1;
        guint ssl_fallback:1;
        guint clean_dispose:1;
+       guint close_on_dispose:1;
        guint use_thread_context:1;
        gpointer ssl_creds;
 
@@ -135,7 +137,7 @@ soup_socket_finalize (GObject *object)
                        g_warning ("Disposing socket %p during connect", object);
                g_object_unref (priv->connect_cancel);
        }
-       if (priv->gsock) {
+       if (priv->gsock && priv->close_on_dispose) {
                if (priv->clean_dispose)
                        g_warning ("Disposing socket %p while still connected", object);
                disconnect_internal (SOUP_SOCKET (object), TRUE);
@@ -253,6 +255,9 @@ soup_socket_set_property (GObject *object, guint prop_id,
                        priv->clean_dispose = TRUE;
                }
                break;
+       case PROP_CLOSE_ON_DISPOSE:
+               priv->close_on_dispose = g_value_get_boolean (value);
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -309,6 +314,9 @@ soup_socket_get_property (GObject *object, guint prop_id,
                g_value_set_flags (value, priv->tls_errors);
                break;
                break;
+       case PROP_CLOSE_ON_DISPOSE:
+               g_value_set_boolean (value, priv->close_on_dispose);
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -643,6 +651,14 @@ soup_socket_class_init (SoupSocketClass *socket_class)
                                     "Socket properties",
                                     SOUP_TYPE_SOCKET_PROPERTIES,
                                     G_PARAM_WRITABLE));
+
+       g_object_class_install_property (
+               object_class, PROP_CLOSE_ON_DISPOSE,
+               g_param_spec_boolean (SOUP_SOCKET_CLOSE_ON_DISPOSE,
+                                     "Close socket on disposal",
+                                     "Whether the socket is closed on disposal",
+                                     TRUE,
+                                     G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]