From 0786031804ca369ed64fe6413c2cdabc14eed404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Fri, 23 Jul 2021 22:05:52 +0200 Subject: [PATCH 1/8] g_test_run: Introduce a clean up path once test suite ran --- glib/gtestutils.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/glib/gtestutils.c b/glib/gtestutils.c index 2c3ea24a8..8ae746c73 100644 --- a/glib/gtestutils.c +++ b/glib/gtestutils.c @@ -2178,8 +2178,15 @@ g_test_get_root (void) int g_test_run (void) { - if (g_test_run_suite (g_test_get_root()) != 0) - return 1; + int ret; + GTestSuite *suite; + + suite = g_test_get_root (); + if (g_test_run_suite (suite) != 0) + { + ret = 1; + goto out; + } /* Clean up the temporary directory. */ if (test_isolate_dirs_tmpdir != NULL) @@ -2192,12 +2199,24 @@ g_test_run (void) /* 77 is special to Automake's default driver, but not Automake's TAP driver * or Perl's prove(1) TAP driver. */ if (test_tap_log) - return 0; + { + ret = 0; + goto out; + } if (test_run_count > 0 && test_run_count == test_skipped_count) - return 77; + { + ret = 77; + goto out; + } else - return 0; + { + ret = 0; + goto out; + } + +out: + return ret; } /** From f0c0d8b67ce7cd089f50fb6660eedb4814951d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Fri, 23 Jul 2021 22:10:08 +0200 Subject: [PATCH 2/8] glib/gtestutils: Introduce and use a g_test_case_free function --- docs/reference/glib/glib-sections.txt | 1 + glib/gtestutils.c | 15 +++++++++++++++ glib/gtestutils.h | 3 +++ 3 files changed, 19 insertions(+) diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt index 9c45e5e4b..b087fe050 100644 --- a/docs/reference/glib/glib-sections.txt +++ b/docs/reference/glib/glib-sections.txt @@ -3638,6 +3638,7 @@ g_test_get_root g_test_suite_add g_test_suite_add_suite g_test_run_suite +g_test_case_free g_test_trap_assertions diff --git a/glib/gtestutils.c b/glib/gtestutils.c index 8ae746c73..ce53a8047 100644 --- a/glib/gtestutils.c +++ b/glib/gtestutils.c @@ -2994,6 +2994,21 @@ g_test_run_suite (GTestSuite *suite) return n_bad; } +/** + * g_test_case_free: + * @test_case: a #GTestCase + * + * Free the @test_case. + * + * Since: 2.70 + */ +void +g_test_case_free (GTestCase *test_case) +{ + g_free (test_case->name); + g_slice_free (GTestCase, test_case); +} + static void gtest_default_log_handler (const gchar *log_domain, GLogLevelFlags log_level, diff --git a/glib/gtestutils.h b/glib/gtestutils.h index 041143936..2376761d8 100644 --- a/glib/gtestutils.h +++ b/glib/gtestutils.h @@ -506,6 +506,9 @@ void g_test_suite_add_suite (GTestSuite *suite, GLIB_AVAILABLE_IN_ALL int g_test_run_suite (GTestSuite *suite); +GLIB_AVAILABLE_IN_2_70 +void g_test_case_free (GTestCase *test_case); + GLIB_AVAILABLE_IN_ALL void g_test_trap_assertions (const char *domain, const char *file, From 353f0b523537a4cf993a9835cbd58051d5e6b043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Fri, 23 Jul 2021 22:16:44 +0200 Subject: [PATCH 3/8] glib/gtestutils: Introduce and use a g_test_suite_free function --- docs/reference/glib/glib-sections.txt | 1 + glib/gtestutils.c | 21 +++++++++++++++++++++ glib/gtestutils.h | 3 +++ 3 files changed, 25 insertions(+) diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt index b087fe050..409f8e1be 100644 --- a/docs/reference/glib/glib-sections.txt +++ b/docs/reference/glib/glib-sections.txt @@ -3639,6 +3639,7 @@ g_test_suite_add g_test_suite_add_suite g_test_run_suite g_test_case_free +g_test_suite_free g_test_trap_assertions diff --git a/glib/gtestutils.c b/glib/gtestutils.c index ce53a8047..ab80e48b2 100644 --- a/glib/gtestutils.c +++ b/glib/gtestutils.c @@ -2216,6 +2216,7 @@ g_test_run (void) } out: + g_test_suite_free (suite); return ret; } @@ -3009,6 +3010,26 @@ g_test_case_free (GTestCase *test_case) g_slice_free (GTestCase, test_case); } +/** + * g_test_suite_free: + * @suite: a #GTestSuite + * + * Free the @suite and all nested #GTestSuites. + * + * Since: 2.70 + */ +void +g_test_suite_free (GTestSuite *suite) +{ + g_slist_free_full (suite->cases, (GDestroyNotify)g_test_case_free); + + g_free (suite->name); + + g_slist_free_full (suite->suites, (GDestroyNotify)g_test_suite_free); + + g_slice_free (GTestSuite, suite); +} + static void gtest_default_log_handler (const gchar *log_domain, GLogLevelFlags log_level, diff --git a/glib/gtestutils.h b/glib/gtestutils.h index 2376761d8..5be4ce215 100644 --- a/glib/gtestutils.h +++ b/glib/gtestutils.h @@ -509,6 +509,9 @@ int g_test_run_suite (GTestSuite *suite); GLIB_AVAILABLE_IN_2_70 void g_test_case_free (GTestCase *test_case); +GLIB_AVAILABLE_IN_2_70 +void g_test_suite_free (GTestSuite *suite); + GLIB_AVAILABLE_IN_ALL void g_test_trap_assertions (const char *domain, const char *file, From bd779c96e946402851e42505ed36e984b303d3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Fri, 23 Jul 2021 22:20:54 +0200 Subject: [PATCH 4/8] glib/gtestutils: Introduce and use a test_cleanup function --- glib/gtestutils.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/glib/gtestutils.c b/glib/gtestutils.c index ab80e48b2..8aafc703b 100644 --- a/glib/gtestutils.c +++ b/glib/gtestutils.c @@ -832,6 +832,7 @@ struct DestroyEntry }; /* --- prototypes --- */ +static void test_cleanup (void); static void test_run_seed (const gchar *rseed); static void test_trap_clear (void); static guint8* g_test_log_dump (GTestLogMsg *msg, @@ -1726,6 +1727,18 @@ void test_built_files_dir = test_argv0_dirname; } +static void +test_cleanup (void) +{ + /* Free statically allocated variables */ + + g_clear_pointer (&test_run_rand, g_rand_free); + + g_clear_pointer (&test_argv0_dirname, g_free); + + g_clear_pointer (&test_initial_cwd, g_free); +} + static void test_run_seed (const gchar *rseed) { @@ -2217,6 +2230,7 @@ g_test_run (void) out: g_test_suite_free (suite); + test_cleanup (); return ret; } From d129395fe2f22f12004526bc11ca7d407f42e4ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Thu, 22 Jul 2021 16:41:09 +0200 Subject: [PATCH 5/8] g_system_thread_new: Free a memory leak on error path --- glib/gthread-posix.c | 1 + 1 file changed, 1 insertion(+) diff --git a/glib/gthread-posix.c b/glib/gthread-posix.c index 3d69767e6..8e2e66db5 100644 --- a/glib/gthread-posix.c +++ b/glib/gthread-posix.c @@ -1331,6 +1331,7 @@ g_system_thread_new (GThreadFunc proxy, { g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN, "Error creating thread: %s", g_strerror (ret)); + g_free (thread->thread.name); g_slice_free (GThreadPosix, thread); return NULL; } From dd69955e58c2b2f702edbf0130c0cea8f37fe5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Thu, 22 Jul 2021 16:44:02 +0200 Subject: [PATCH 6/8] gio/tests/async-splice-output-stream: Fix a memory leak --- gio/tests/async-splice-output-stream.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gio/tests/async-splice-output-stream.c b/gio/tests/async-splice-output-stream.c index fb317b733..3ac03ae67 100644 --- a/gio/tests/async-splice-output-stream.c +++ b/gio/tests/async-splice-output-stream.c @@ -63,6 +63,7 @@ test_copy_chunks_splice_cb (GObject *source, if (data->flags & TEST_CANCEL) { g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); + g_error_free (error); g_main_loop_quit (data->main_loop); return; } From 5e356d90b203aad1987556fb14a035201ff1d67f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Thu, 22 Jul 2021 16:45:08 +0200 Subject: [PATCH 7/8] glib/tests/spawn-path-search: Fix memory leaks --- glib/tests/spawn-path-search.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glib/tests/spawn-path-search.c b/glib/tests/spawn-path-search.c index f4278f3e0..2a8911139 100644 --- a/glib/tests/spawn-path-search.c +++ b/glib/tests/spawn-path-search.c @@ -389,6 +389,8 @@ test_search_path_heap_allocation (void) long_dir = g_test_build_filename (G_TEST_BUILT, "path-test-subdir", placeholder, NULL); long_path = g_strjoin (G_SEARCHPATH_SEPARATOR_S, subdir, long_dir, NULL); envp = g_environ_setenv (envp, "PATH", long_path, TRUE); + g_free (long_path); + g_free (long_dir); g_ptr_array_add (argv, g_test_build_filename (G_TEST_BUILT, "spawn-path-search-helper", NULL)); From 6e46edea5bb67485f00b7567275fd33c497447e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOUJON=20=C3=89van?= Date: Thu, 22 Jul 2021 16:45:37 +0200 Subject: [PATCH 8/8] gobject/tests/param: Fix a memory leak --- gobject/tests/param.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gobject/tests/param.c b/gobject/tests/param.c index 3ab87ef77..e1f3cdeb1 100644 --- a/gobject/tests/param.c +++ b/gobject/tests/param.c @@ -905,6 +905,7 @@ main (int argc, char *argv[]) data.use_this_flag, data.use_this_type); test_data = g_memdup2 (&data, sizeof (TestParamImplementData)); g_test_add_data_func_full (test_path, test_data, test_param_implement_child, g_free); + g_free (test_data); g_free (test_path); }