[libsoup] tests: plug leaks, update libsoup.supp



commit 3401c861f83c0822ab97fe9d169e8dcebd52da23
Author: Dan Winship <danw gnome org>
Date:   Mon Mar 2 21:28:18 2015 -0500

    tests: plug leaks, update libsoup.supp

 tests/cache-test.c     |    3 +-
 tests/date.c           |    2 +
 tests/libsoup.supp     |   88 ++++++++++++++++++++++++++++++++++++++++++++---
 tests/misc-test.c      |   33 +++++++++++++-----
 tests/proxy-test.c     |    2 +
 tests/redirect-test.c  |    1 +
 tests/requester-test.c |    2 +-
 tests/server-test.c    |    9 ++++-
 tests/session-test.c   |    2 +
 tests/socket-test.c    |    4 ++-
 tests/test-utils.c     |   46 ++++++++++++++++++++----
 tests/timeout-test.c   |    2 +
 tests/websocket-test.c |   18 +++++----
 13 files changed, 176 insertions(+), 36 deletions(-)
---
diff --git a/tests/cache-test.c b/tests/cache-test.c
index ec99a2d..7d5897c 100644
--- a/tests/cache-test.c
+++ b/tests/cache-test.c
@@ -240,7 +240,8 @@ do_request_with_cancel (SoupSession          *session,
                g_object_unref (stream);
                g_object_unref (req);
                return;
-       }
+       } else
+               g_clear_error (&error);
 
        g_clear_object (&cancellable);
        g_clear_object (&stream);
diff --git a/tests/date.c b/tests/date.c
index e51fa57..55fc8eb 100644
--- a/tests/date.c
+++ b/tests/date.c
@@ -177,6 +177,8 @@ check_ok_time_t (void)
        g_assert_cmpint (date->hour,   ==, 8);
        g_assert_cmpint (date->minute, ==, 9);
        g_assert_cmpint (date->second, ==, 7);
+
+       soup_date_free (date);
 }
 
 typedef struct {
diff --git a/tests/libsoup.supp b/tests/libsoup.supp
index ae8bda3..2c7ba9b 100644
--- a/tests/libsoup.supp
+++ b/tests/libsoup.supp
@@ -208,13 +208,20 @@
    glib/tlsdb
    Memcheck:Leak
    ...
-   fun:g_tls_backend_get_default_database
+   fun:g_tls_backend_gnutls_get_default_database
+}
+{
+   glib/tlsdb_dummy
+   Memcheck:Leak
+   ...
+   fun:g_dummy_tls_backend_get_default_database
 }
 {
    glib/tlscache
    Memcheck:Leak
    ...
-   fun:g_tls_backend_gnutls_cache_session_data
+   fun:g_bytes_new_with_free_func
+   fun:g_tls_client_connection_gnutls_constructed
 }
 {
    glib/tlspriority
@@ -230,6 +237,12 @@
    fun:lookup_attribute
 }
 {
+   glib/gfileinfo2
+   Memcheck:Leak
+   ...
+   fun:_lookup_namespace
+}
+{
   glib/unixsignalthread
   Memcheck:Leak
   ...
@@ -312,7 +325,7 @@
    glib/unused_thread_queue
    Memcheck:Leak
    ...
-   fun:g_async_queue_new
+   fun:g_async_queue_new_full
    fun:g_thread_pool_new
 }
 {
@@ -336,6 +349,18 @@
    fun:g_get_charset
 }
 {
+   glib/tmpdir
+   Memcheck:Leak
+   ...
+   fun:g_get_tmp_dir
+}
+{
+   glib/g_get_user_name
+   Memcheck:Leak
+   ...
+   fun:g_get_user_name
+}
+{
    glib/gtlssessioncache
    Memcheck:Leak
    ...
@@ -414,6 +439,30 @@
    fun:g_thread_pool_new
    fun:g_task_thread_pool_init
 }
+{
+   glib/resources
+   Memcheck:Leak
+   ...
+   fun:g_resource_load
+}
+{
+   glib/resources2
+   Memcheck:Leak
+   ...
+   fun:g_resources_register
+}
+{
+   glib/worker
+   Memcheck:Leak
+   ...
+   fun:g_get_worker_context
+}
+{
+   glib/worker2
+   Memcheck:Leak
+   ...
+   fun:glib_worker_main
+}
 
 # probably inlines the aggressive memcpy/memcmp
 {
@@ -444,10 +493,16 @@
 }
 
 {
-   libxml2/xmlInitParser
+   libxml2/xmlInitGlobals
+   Memcheck:Leak
+   ...
+   fun:xmlInitGlobals
+}
+{
+   libxml2/xmlInitMemory
    Memcheck:Leak
    ...
-   fun:xmlInitParser
+   fun:xmlInitMemory
 }
 {
    libxml2/xmlInitParserCtxt
@@ -459,7 +514,7 @@
    libxml2/xmlInitializeDict
    Memcheck:Leak
    ...
-   fun:xmlInitializeDict
+   fun:__xmlInitializeDict
 }
 {
    libxml2/xmlInitCharEncodingHandlers
@@ -504,6 +559,20 @@
    fun:g_mutex_get_impl
 }
 {
+   glib/grecmuteximpl
+   Memcheck:Leak
+   ...
+   fun:g_rec_mutex_impl_new
+   fun:g_rec_mutex_get_impl
+}
+{
+   glib/grwlockimpl
+   Memcheck:Leak
+   ...
+   fun:g_rw_lock_impl_new
+   fun:g_rw_lock_get_impl
+}
+{
    glib/gcondimpl
    Memcheck:Leak
    ...
@@ -517,3 +586,10 @@
    fun:g_private_impl_new
    fun:g_private_get_impl
 }
+{
+   glib/test_uri_base
+   Memcheck:Leak
+   ...
+   fun:g_strdup
+   fun:test_case_run
+}
\ No newline at end of file
diff --git a/tests/misc-test.c b/tests/misc-test.c
index 4dab6fe..6d43bd7 100644
--- a/tests/misc-test.c
+++ b/tests/misc-test.c
@@ -976,11 +976,10 @@ do_pause_cancel_test (void)
                g_source_remove (timeout_id);
 }
 
-static void
-steal_after_upgrade (SoupMessage *msg, gpointer user_data)
+static gboolean
+run_echo_server (gpointer user_data)
 {
-       SoupClientContext *context = user_data;
-       GIOStream *stream;
+       GIOStream *stream = user_data;
        GInputStream *istream;
        GDataInputStream *distream;
        GOutputStream *ostream;
@@ -988,11 +987,6 @@ steal_after_upgrade (SoupMessage *msg, gpointer user_data)
        gssize n;
        GError *error = NULL;
 
-       /* This should not ever be seen. */
-       soup_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
-
-       stream = soup_client_context_steal_connection (context);
-
        istream = g_io_stream_get_input_stream (stream);
        distream = G_DATA_INPUT_STREAM (g_data_input_stream_new (istream));
        ostream = g_io_stream_get_output_stream (stream);
@@ -1020,6 +1014,26 @@ steal_after_upgrade (SoupMessage *msg, gpointer user_data)
        g_io_stream_close (stream, NULL, &error);
        g_assert_no_error (error);
        g_object_unref (stream);
+
+       return FALSE;
+}
+
+static void
+steal_after_upgrade (SoupMessage *msg, gpointer user_data)
+{
+       SoupClientContext *context = user_data;
+       GIOStream *stream;
+       GSource *source;
+
+       /* This should not ever be seen. */
+       soup_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
+
+       stream = soup_client_context_steal_connection (context);
+
+       source = g_idle_source_new ();
+       g_source_set_callback (source, run_echo_server, stream, NULL);
+       g_source_attach (source, g_main_context_get_thread_default ());
+       g_source_unref (source);
 }
 
 static void
@@ -1196,5 +1210,6 @@ main (int argc, char **argv)
                soup_test_server_quit_unref (ssl_server);
        }
 
+       test_cleanup ();
        return ret;
 }
diff --git a/tests/proxy-test.c b/tests/proxy-test.c
index e898a0b..2632551 100644
--- a/tests/proxy-test.c
+++ b/tests/proxy-test.c
@@ -360,6 +360,8 @@ main (int argc, char **argv)
 
        soup_uri_free (base_uri);
        soup_test_server_quit_unref (server);
+       for (i = 0; i < 3; i++)
+               g_object_unref (proxy_resolvers[i]);
 
        test_cleanup ();
        return ret;
diff --git a/tests/redirect-test.c b/tests/redirect-test.c
index 6b165e8..ccdd4c2 100644
--- a/tests/redirect-test.c
+++ b/tests/redirect-test.c
@@ -458,5 +458,6 @@ main (int argc, char **argv)
        soup_test_session_abort_unref (async_session);
        soup_test_session_abort_unref (sync_session);
 
+       test_cleanup ();
        return ret;
 }
diff --git a/tests/requester-test.c b/tests/requester-test.c
index 506bb7f..04c1d02 100644
--- a/tests/requester-test.c
+++ b/tests/requester-test.c
@@ -747,6 +747,7 @@ do_close_test_for_session (SoupSession *session,
        if (error)
                g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
        g_clear_error (&error);
+       g_object_unref (cancellable);
 
        g_assert_true (finished);
 
@@ -831,7 +832,6 @@ main (int argc, char **argv)
        ret = g_test_run ();
 
        soup_uri_free (uri);
-       soup_buffer_free (response);
        soup_buffer_free (auth_response);
        soup_test_server_quit_unref (server);
 
diff --git a/tests/server-test.c b/tests/server-test.c
index 80ad03e..9e46bb5 100644
--- a/tests/server-test.c
+++ b/tests/server-test.c
@@ -831,6 +831,7 @@ do_fail_404_test (ServerData *sd, gconstpointer test_data)
        msg = soup_message_new_from_uri ("GET", sd->base_uri);
        soup_session_send_message (session, msg);
        soup_test_assert_message_status (msg, SOUP_STATUS_NOT_FOUND);
+       g_object_unref (msg);
 
        g_assert_false (usd.handler_called);
        g_assert_false (usd.paused);
@@ -855,6 +856,7 @@ do_fail_500_test (ServerData *sd, gconstpointer pause)
                soup_message_headers_append (msg->request_headers, "X-Test-Server-Pause", "true");
        soup_session_send_message (session, msg);
        soup_test_assert_message_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);
+       g_object_unref (msg);
 
        g_assert_true (usd.handler_called);
        if (pause)
@@ -1097,8 +1099,8 @@ tunnel_close (Tunnel *tunnel)
        g_free (tunnel->client.buffer);
        g_free (tunnel->server.buffer);
 
-       g_object_unref (tunnel->self);
-       g_object_unref (tunnel->msg);
+       g_clear_object (&tunnel->self);
+       g_clear_object (&tunnel->msg);
 
        g_free (tunnel);
 }
@@ -1196,6 +1198,8 @@ start_tunnel (SoupMessage *msg, gpointer user_data)
        tunnel->client.iostream = soup_client_context_steal_connection (tunnel->context);
        tunnel->client.istream = g_io_stream_get_input_stream (tunnel->client.iostream);
        tunnel->client.ostream = g_io_stream_get_output_stream (tunnel->client.iostream);
+       g_clear_object (&tunnel->self);
+       g_clear_object (&tunnel->msg);
 
        tunnel->client.buffer = g_malloc (BUFSIZE);
        tunnel->server.buffer = g_malloc (BUFSIZE);
@@ -1296,6 +1300,7 @@ do_steal_connect_test (ServerData *sd, gconstpointer test_data)
 
        g_object_unref (msg);
        soup_test_session_abort_unref (session);
+
        soup_test_server_quit_unref (proxy);
        soup_uri_free (proxy_uri);
 }
diff --git a/tests/session-test.c b/tests/session-test.c
index 84fe35b..8957a25 100644
--- a/tests/session-test.c
+++ b/tests/session-test.c
@@ -101,6 +101,7 @@ do_test_for_session (SoupSession *session, SoupURI *uri,
        server_processed_message = local_timeout = FALSE;
        timeout_id = g_idle_add_full (G_PRIORITY_HIGH, timeout_cb, &local_timeout, NULL);
        soup_session_send_message (session, msg);
+       g_object_unref (msg);
 
        g_assert_true (server_processed_message);
 
@@ -139,6 +140,7 @@ do_test_for_session (SoupSession *session, SoupURI *uri,
                while (!finished)
                        g_main_context_iteration (NULL, TRUE);
        }
+       g_main_loop_unref (loop);
 
        soup_test_assert_message_status (msg, SOUP_STATUS_CANCELLED);
        g_object_unref (msg);
diff --git a/tests/socket-test.c b/tests/socket-test.c
index 52a8fbb..9e32ca6 100644
--- a/tests/socket-test.c
+++ b/tests/socket-test.c
@@ -167,7 +167,8 @@ do_socket_from_fd_client_test (void)
        g_object_unref (sock);
        g_object_unref (gsock);
 
-       g_object_unref (server);
+       soup_test_server_quit_unref (server);
+       soup_uri_free (uri);
 }
 
 static void
@@ -214,6 +215,7 @@ do_socket_from_fd_server_test (void)
        g_assert_cmpstr (soup_address_get_physical (local), ==, "127.0.0.1");
        g_assert_cmpint (soup_address_get_port (local), ==, g_inet_socket_address_get_port 
(G_INET_SOCKET_ADDRESS (gaddr)));
        g_object_unref (local);
+       g_object_unref (gaddr);
 
        g_object_unref (sock);
 
diff --git a/tests/test-utils.c b/tests/test-utils.c
index 02455cc..ad0410c 100644
--- a/tests/test-utils.c
+++ b/tests/test-utils.c
@@ -66,6 +66,7 @@ test_init (int argc, char **argv, GOptionEntry *entries)
        setlocale (LC_ALL, "");
        g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
        g_setenv ("GIO_USE_PROXY_RESOLVER", "dummy", TRUE);
+       g_setenv ("GIO_USE_VFS", "local", TRUE);
 
        name = strrchr (argv[0], '/');
        if (!name++)
@@ -444,10 +445,6 @@ soup_test_server_get_uri (SoupServer    *server,
                return uri;
 
        /* Need to add a new listener */
-       uri = soup_uri_new (NULL);
-       soup_uri_set_scheme (uri, scheme);
-       soup_uri_set_host (uri, host);
-
        loop = g_object_get_data (G_OBJECT (server), "GMainLoop");
        if (loop) {
                GMainContext *context = g_main_loop_get_context (loop);
@@ -477,8 +474,39 @@ soup_test_server_get_uri (SoupServer    *server,
 }
 
 static gboolean
-idle_quit_server (gpointer loop)
+done_waiting (gpointer user_data)
 {
+       gboolean *done = user_data;
+
+       *done = TRUE;
+       return FALSE;
+}
+
+static void
+disconnect_and_wait (SoupServer *server,
+                    GMainContext *context)
+{
+       GSource *source;
+       gboolean done = FALSE;
+
+       source = g_idle_source_new ();
+       g_source_set_priority (source, G_PRIORITY_LOW);
+       g_source_set_callback (source, done_waiting, &done, NULL);
+       g_source_attach (source, context);
+       g_source_unref (source);
+
+       soup_server_disconnect (server);
+       while (!done)
+               g_main_context_iteration (context, TRUE);
+}
+
+static gboolean
+idle_quit_server (gpointer user_data)
+{
+       SoupServer *server = user_data;
+       GMainLoop *loop = g_object_get_data (G_OBJECT (server), "GMainLoop");
+
+       disconnect_and_wait (server, g_main_loop_get_context (loop));
        g_main_loop_quit (loop);
        return FALSE;
 }
@@ -495,10 +523,12 @@ soup_test_server_quit_unref (SoupServer *server)
 
                loop = g_object_get_data (G_OBJECT (server), "GMainLoop");
                context = g_main_loop_get_context (loop);
-               soup_add_completion (context, idle_quit_server, loop);
+               g_main_context_ref (context);
+               soup_add_completion (context, idle_quit_server, server);
+               g_main_context_unref (context);
                g_thread_join (thread);
        } else
-               soup_server_disconnect (server);
+               disconnect_and_wait (server, NULL);
 
        g_assert_cmpint (G_OBJECT (server)->ref_count, ==, 1);
        g_object_unref (server);
@@ -610,7 +640,7 @@ soup_test_request_send (SoupRequest   *req,
                g_timeout_add_full (G_PRIORITY_HIGH, interval, cancel_request_timeout, cancel_data, NULL);
        }
        if (cancel_data && (flags & SOUP_TEST_REQUEST_CANCEL_PREEMPTIVE))
-               g_cancellable_cancel (cancellable);
+               cancel_message_or_cancellable (cancel_data);
        soup_request_send_async (req, cancellable, async_as_sync_callback, &data);
        g_main_loop_run (data.loop);
 
diff --git a/tests/timeout-test.c b/tests/timeout-test.c
index afb2c59..c783d9a 100644
--- a/tests/timeout-test.c
+++ b/tests/timeout-test.c
@@ -265,6 +265,8 @@ do_sync_timeout_tests (gconstpointer data)
        do_req_tests_for_session (timeout_session, NULL, plain_session, fast_uri, slow_uri);
        soup_test_session_abort_unref (timeout_session);
        soup_test_session_abort_unref (plain_session);
+
+       soup_uri_free (slow_uri);
 }
 
 static gboolean
diff --git a/tests/websocket-test.c b/tests/websocket-test.c
index aee8bfc..78dced5 100644
--- a/tests/websocket-test.c
+++ b/tests/websocket-test.c
@@ -112,6 +112,7 @@ direct_connection_complete (GObject *object,
                                                      SOUP_WEBSOCKET_CONNECTION_CLIENT,
                                                      NULL, NULL);
        soup_uri_free (uri);
+       g_object_unref (conn);
 }
 
 static gboolean
@@ -140,6 +141,7 @@ got_connection (GSocket *listener,
                                                              SOUP_WEBSOCKET_CONNECTION_SERVER,
                                                              NULL, NULL);
                soup_uri_free (uri);
+               g_object_unref (conn);
        }
 
        return FALSE;
@@ -162,7 +164,7 @@ setup_direct_connection (Test *test,
        g_source_set_callback (listen_source, (GSourceFunc) got_connection, test, NULL);
        g_source_attach (listen_source, NULL);
 
-       while (test->client == NULL || (test->server == NULL && !test->no_server))
+       while (test->client == NULL || (test->server == NULL && test->raw_server == NULL))
                g_main_context_iteration (NULL, TRUE);
        
        g_source_destroy (listen_source);
@@ -267,14 +269,12 @@ static void
 teardown_soup_connection (Test *test,
                          gconstpointer data)
 {
-       g_clear_object (&test->client);
-       g_clear_error (&test->client_error);
-
-       if (test->session)
-               soup_test_session_abort_unref (test->session);
+       teardown_direct_connection (test, data);
 
-       if (test->soup_server)
-               soup_test_server_quit_unref (test->soup_server);
+       g_clear_object (&test->msg);
+       g_clear_error (&test->client_error);
+       g_clear_pointer (&test->session, soup_test_session_abort_unref);
+       g_clear_pointer (&test->soup_server, soup_test_server_quit_unref);
 }
 
 
@@ -779,6 +779,8 @@ test_receive_fragmented (Test *test,
        g_bytes_unref (received);
 
        g_thread_join (thread);
+
+       WAIT_UNTIL (soup_websocket_connection_get_state (test->client) == SOUP_WEBSOCKET_STATE_CLOSED);
 }
 
 int


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