From 1d026e22752eb4138d46787d41ebfa2527e449fa Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 4 Dec 2020 12:51:45 -0800 Subject: [PATCH] disk_cache: Fix memory leaks in the unit test. Needed for meson test with asan enabled. Reviewed-by: Adam Jackson Part-of: --- src/compiler/glsl/tests/cache_test.c | 34 ++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/compiler/glsl/tests/cache_test.c b/src/compiler/glsl/tests/cache_test.c index 76ea8e8b841..144fd72173c 100644 --- a/src/compiler/glsl/tests/cache_test.c +++ b/src/compiler/glsl/tests/cache_test.c @@ -51,6 +51,15 @@ expect_true(bool result, const char *test) error = true; } } +static void +expect_false(bool result, const char *test) +{ + if (result) { + fprintf(stderr, "Error: Test '%s' failed: Expected=false" + ", Actual=true\n", test); + error = true; + } +} static void expect_equal(uint64_t actual, uint64_t expected, const char *test) @@ -162,7 +171,7 @@ does_cache_contain(struct disk_cache *cache, const cache_key key) return false; } -static void * +static bool cache_exists(struct disk_cache *cache) { uint8_t dummy_key[20]; @@ -173,7 +182,10 @@ cache_exists(struct disk_cache *cache) disk_cache_put(cache, dummy_key, data, sizeof(data), NULL); disk_cache_wait_for_idle(cache); - return disk_cache_get(cache, dummy_key, NULL); + void *result = disk_cache_get(cache, dummy_key, NULL); + + free(result); + return result != NULL; } #define CACHE_TEST_TMP "./cache-test-tmp" @@ -227,8 +239,8 @@ test_disk_cache_create(void) /* Test with XDG_CACHE_HOME set */ setenv("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", 1); cache = disk_cache_create("test", "make_check", 0); - expect_null(cache_exists(cache), "disk_cache_create with XDG_CACHE_HOME set " - "with a non-existing parent directory"); + expect_false(cache_exists(cache), "disk_cache_create with XDG_CACHE_HOME set " + "with a non-existing parent directory"); err = mkdir(CACHE_TEST_TMP, 0755); if (err != 0) { @@ -236,10 +248,11 @@ test_disk_cache_create(void) error = true; return; } + disk_cache_destroy(cache); cache = disk_cache_create("test", "make_check", 0); - expect_non_null(cache_exists(cache), "disk_cache_create with XDG_CACHE_HOME " - "set"); + expect_true(cache_exists(cache), "disk_cache_create with XDG_CACHE_HOME " + "set"); check_directories_created(CACHE_TEST_TMP "/xdg-cache-home/" CACHE_DIR_NAME); @@ -252,8 +265,8 @@ test_disk_cache_create(void) setenv("MESA_GLSL_CACHE_DIR", CACHE_TEST_TMP "/mesa-glsl-cache-dir", 1); cache = disk_cache_create("test", "make_check", 0); - expect_null(cache_exists(cache), "disk_cache_create with MESA_GLSL_CACHE_DIR" - " set with a non-existing parent directory"); + expect_false(cache_exists(cache), "disk_cache_create with MESA_GLSL_CACHE_DIR" + " set with a non-existing parent directory"); err = mkdir(CACHE_TEST_TMP, 0755); if (err != 0) { @@ -261,10 +274,11 @@ test_disk_cache_create(void) error = true; return; } + disk_cache_destroy(cache); cache = disk_cache_create("test", "make_check", 0); - expect_non_null(cache_exists(cache), "disk_cache_create with " - "MESA_GLSL_CACHE_DIR set"); + expect_true(cache_exists(cache), "disk_cache_create with " + "MESA_GLSL_CACHE_DIR set"); check_directories_created(CACHE_TEST_TMP "/mesa-glsl-cache-dir/" CACHE_DIR_NAME);