[libsoup] libsoup: leak fixes and other valgrindage



commit 1c3983f6d0b4097492963f57dd1453f32616c3a3
Author: Dan Winship <danw gnome org>
Date:   Mon Mar 2 21:27:49 2015 -0500

    libsoup: leak fixes and other valgrindage

 libsoup/soup-auth.c               |    2 ++
 libsoup/soup-cache-input-stream.c |    1 +
 libsoup/soup-connection.c         |    6 ++++++
 libsoup/soup-message-io.c         |   14 ++++++++++----
 4 files changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/libsoup/soup-auth.c b/libsoup/soup-auth.c
index 3c64522..49d8df2 100644
--- a/libsoup/soup-auth.c
+++ b/libsoup/soup-auth.c
@@ -80,9 +80,11 @@ soup_auth_set_property (GObject *object, guint prop_id,
 
        switch (prop_id) {
        case PROP_REALM:
+               g_free (auth->realm);
                auth->realm = g_value_dup_string (value);
                break;
        case PROP_HOST:
+               g_free (priv->host);
                priv->host = g_value_dup_string (value);
                break;
        case PROP_IS_FOR_PROXY:
diff --git a/libsoup/soup-cache-input-stream.c b/libsoup/soup-cache-input-stream.c
index 679531d..26bf52e 100644
--- a/libsoup/soup-cache-input-stream.c
+++ b/libsoup/soup-cache-input-stream.c
@@ -56,6 +56,7 @@ notify_and_clear (SoupCacheInputStream *istream, GError *error)
 
        g_clear_object (&priv->cancellable);
        g_clear_object (&priv->output_stream);
+       g_clear_error (&error);
 }
 
 static inline void
diff --git a/libsoup/soup-connection.c b/libsoup/soup-connection.c
index de897ac..123f85e 100644
--- a/libsoup/soup-connection.c
+++ b/libsoup/soup-connection.c
@@ -70,6 +70,12 @@ soup_connection_finalize (GObject *object)
        g_clear_pointer (&priv->remote_uri, soup_uri_free);
        g_clear_pointer (&priv->proxy_uri, soup_uri_free);
        g_clear_pointer (&priv->socket_props, soup_socket_properties_unref);
+       g_clear_object (&priv->current_msg);
+
+       if (priv->socket) {
+               g_signal_handlers_disconnect_by_data (priv->socket, object);
+               g_object_unref (priv->socket);
+       }
 
        G_OBJECT_CLASS (soup_connection_parent_class)->finalize (object);
 }
diff --git a/libsoup/soup-message-io.c b/libsoup/soup-message-io.c
index bec3e34..f7ae436 100644
--- a/libsoup/soup-message-io.c
+++ b/libsoup/soup-message-io.c
@@ -125,6 +125,12 @@ soup_message_io_cleanup (SoupMessage *msg)
        if (io->write_chunk)
                soup_buffer_free (io->write_chunk);
 
+       if (io->async_close_wait) {
+               g_cancellable_cancel (io->async_close_wait);
+               g_clear_object (&io->async_close_wait);
+       }
+       g_clear_error (&io->async_close_error);
+
        g_slice_free (SoupMessageIOData, io);
 }
 
@@ -993,16 +999,16 @@ io_run_until (SoupMessage *msg, gboolean blocking,
                g_propagate_error (error, my_error);
                g_object_unref (msg);
                return FALSE;
-       } else if (!io->async_close_wait &&
-                  g_cancellable_set_error_if_cancelled (cancellable, error)) {
-               g_object_unref (msg);
-               return FALSE;
        } else if (priv->io_data != io) {
                g_set_error_literal (error, G_IO_ERROR,
                                     G_IO_ERROR_CANCELLED,
                                     _("Operation was cancelled"));
                g_object_unref (msg);
                return FALSE;
+       } else if (!io->async_close_wait &&
+                  g_cancellable_set_error_if_cancelled (cancellable, error)) {
+               g_object_unref (msg);
+               return FALSE;
        }
 
        done = (io->read_state >= read_state &&


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