tests: fix memory leaks
authorDan Winship <danw@gnome.org>
Tue, 11 Dec 2012 16:34:06 +0000 (17:34 +0100)
committerDan Winship <danw@gnome.org>
Tue, 11 Dec 2012 16:34:06 +0000 (17:34 +0100)
tests/libsoup.supp
tests/multipart-test.c
tests/redirect-test.c
tests/sniffing-test.c

index ac21e96..ae8bda3 100644 (file)
    ...
    fun:thread_memory_from_self
 }
+{
+   glib/gobjectinit
+   Memcheck:Leak
+   ...
+   fun:gobject_init_ctor
+}
+{
+   glib/gtask threadpool
+   Memcheck:Leak
+   ...
+   fun:g_thread_pool_new
+   fun:g_task_thread_pool_init
+}
 
 # probably inlines the aggressive memcpy/memcmp
 {
index 8bcc4cd..a9b3425 100644 (file)
@@ -130,16 +130,19 @@ read_cb (GObject *source, GAsyncResult *asyncResult, gpointer data)
        GInputStream *stream = G_INPUT_STREAM (source);
        GError *error = NULL;
        gssize bytes_read = g_input_stream_read_finish (stream, asyncResult, &error);
+
        if (error) {
                debug_printf (1, "  failed read: %s\n", error->message);
                errors++;
 
+               g_object_unref (stream);
                g_main_loop_quit (loop);
                return;
        }
 
        if (!bytes_read) {
                g_input_stream_close (stream, NULL, &error);
+               g_object_unref (stream);
 
                if (error) {
                        debug_printf (1, "  failed close: %s\n", error->message);
@@ -246,6 +249,7 @@ multipart_read_cb (GObject *source, GAsyncResult *asyncResult, gpointer data)
 
                g_input_stream_close_async (in, G_PRIORITY_DEFAULT, NULL,
                                            multipart_close_part_cb, NULL);
+               g_object_unref (in);
 
                g_main_loop_quit (loop);
                return;
@@ -259,6 +263,7 @@ multipart_read_cb (GObject *source, GAsyncResult *asyncResult, gpointer data)
 
                g_input_stream_close_async (in, G_PRIORITY_DEFAULT, NULL,
                                            multipart_close_part_cb, NULL);
+               g_object_unref (in);
 
                soup_multipart_input_stream_next_part_async (multipart, G_PRIORITY_DEFAULT, NULL,
                                                             multipart_next_part_cb, data);
@@ -362,8 +367,10 @@ multipart_next_part_cb (GObject *source, GAsyncResult *res, gpointer data)
 
        if (error) {
                debug_printf (1, "  failed next part: %s\n", error->message);
+               g_clear_error (&error);
                errors++;
 
+               g_object_unref (multipart);
                g_main_loop_quit (loop);
                return;
        }
@@ -374,6 +381,7 @@ multipart_next_part_cb (GObject *source, GAsyncResult *res, gpointer data)
                        errors++;
                }
 
+               g_object_unref (multipart);
                g_main_loop_quit (loop);
                return;
        }
@@ -400,6 +408,8 @@ multipart_handling_cb (GObject *source, GAsyncResult *res, gpointer data)
        in = soup_request_send_finish (request, res, &error);
        message = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
        multipart = soup_multipart_input_stream_new (message, in);
+       g_object_unref (message);
+       g_object_unref (in);
 
        if (error) {
                debug_printf (1, "  failed send: %s\n", error->message);
@@ -430,6 +440,8 @@ sync_multipart_handling_cb (GObject *source, GAsyncResult *res, gpointer data)
        in = soup_request_send_finish (request, res, &error);
        message = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
        multipart = soup_multipart_input_stream_new (message, in);
+       g_object_unref (message);
+       g_object_unref (in);
 
        if (error) {
                debug_printf (1, "  failed send: %s\n", error->message);
@@ -460,12 +472,14 @@ sync_multipart_handling_cb (GObject *source, GAsyncResult *res, gpointer data)
                        debug_printf (1, "  failed sync read: %s\n", error->message);
                        errors++;
                        g_clear_error (&error);
+                       g_object_unref (in);
                        break;
                }
 
                check_read (bytes_read, passes);
 
                passes++;
+               g_object_unref (in);
        }
 
        if (passes != 4) {
@@ -474,7 +488,7 @@ sync_multipart_handling_cb (GObject *source, GAsyncResult *res, gpointer data)
        }
 
        g_main_loop_quit (loop);
-
+       g_object_unref (multipart);
 }
 
 static const char*
@@ -519,8 +533,6 @@ test_multipart (int headers_expected, int sniffed_expected, MultipartMode multip
        g_signal_connect (msg, "content-sniffed",
                          G_CALLBACK (content_sniffed), &sniffed_count);
 
-       g_object_ref (msg);
-
        if (multipart_mode == ASYNC_MULTIPART)
                soup_request_send_async (request, NULL, multipart_handling_cb, loop);
        else if (multipart_mode == ASYNC_MULTIPART_SMALL_READS) {
@@ -599,6 +611,7 @@ main (int argc, char **argv)
 
        soup_uri_free (base_uri);
        g_free (base_uri_string);
+       g_free (buffer);
 
        soup_test_session_abort_unref (session);
        soup_test_server_quit_unref (server);
index f820d00..3307ce6 100644 (file)
@@ -270,6 +270,7 @@ do_request_api_test (SoupSession *session, SoupURI *base_uri, int n)
                }
 
                g_error_free (error);
+               g_object_unref (msg);
                g_object_unref (reqh);
                debug_printf (2, "\n");
                return;
@@ -277,6 +278,7 @@ do_request_api_test (SoupSession *session, SoupURI *base_uri, int n)
                debug_printf (1, "    could not send request: %s\n",
                              error->message);
                g_error_free (error);
+               g_object_unref (msg);
                g_object_unref (reqh);
                errors++;
                debug_printf (2, "\n");
index e77154e..ab8099d 100644 (file)
@@ -384,8 +384,10 @@ test_sniffing (const char *path, const char *expected_type)
 
        req = soup_session_request_uri (session, uri, NULL);
        stream = soup_test_request_send (req, NULL, &error);
-       if (stream)
+       if (stream) {
                soup_test_request_close_stream (req, stream, NULL, &error);
+               g_object_unref (stream);
+       }
        if (error) {
                debug_printf (1, "  request failed: %s\n", error->message);
                g_clear_error (&error);
@@ -436,8 +438,10 @@ test_disabled (const char *path)
        req = soup_session_request_uri (session, uri, NULL);
        soup_request_disable_feature (req, SOUP_TYPE_CONTENT_SNIFFER);
        stream = soup_test_request_send (req, NULL, &error);
-       if (stream)
+       if (stream) {
                soup_test_request_close_stream (req, stream, NULL, &error);
+               g_object_unref (stream);
+       }
        if (error) {
                debug_printf (1, "  request failed: %s\n", error->message);
                g_clear_error (&error);