From d2f778db43f0c703634e901fee7c929ebd0c8072 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 14 May 2026 18:41:02 +0200 Subject: Fix libtest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libtest/libtest_check_no_leaks.c | 42 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'libtest/libtest_check_no_leaks.c') diff --git a/libtest/libtest_check_no_leaks.c b/libtest/libtest_check_no_leaks.c index aa99377..faaf724 100644 --- a/libtest/libtest_check_no_leaks.c +++ b/libtest/libtest_check_no_leaks.c @@ -46,27 +46,63 @@ out: int libtest_check_no_leaks(void) { - return libtest_fd_tracking(-1) & check_no_memory_leaks(); + int r = 1; + r &= libtest_fd_tracking(-1); + r &= check_no_memory_leaks(); + return r; } #else +#define p libtest_ptr___ +extern unsigned char *volatile p; +unsigned char *volatile p; + + int main(void) { - void *p; +#ifdef WITH_BACKTRACE + int fd1, fd2; +#endif SET_UP_ALARM(); +#ifdef WITH_BACKTRACE + fd1 = dup(STDERR_FILENO); + assert(fd1 >= 0 || errno == EBADF); + assert(fd1 != STDERR_FILENO); + if (fd1 >= 0) { + close(STDERR_FILENO); + fd2 = open("/dev/null", O_WRONLY); + assert(fd2 >= 0); + if (fd2 != STDERR_FILENO) { + assert(dup2(fd2, STDERR_FILENO) == STDERR_FILENO); + close(fd2); + } + } + libtest_print_backtrace(stderr, "", "", 0u, NULL, NULL); + if (fd1 >= 0) { + assert(dup2(fd1, STDERR_FILENO) == STDERR_FILENO); + close(fd1); + } +#endif + libtest_start_tracking(); - assert(p = malloc(1u)); + assert(!libtest_kill_malloc_tracking); + p = malloc(1u); + assert(p); libtest_suppress_leak_output = 1; + *p = 0; + atomic_thread_fence(memory_order_seq_cst); EXPECT(!libtest_check_no_leaks()); + atomic_thread_fence(memory_order_seq_cst); libtest_suppress_leak_output = 0; free(p); libtest_stop_tracking(); + atomic_thread_fence(memory_order_seq_cst); EXPECT(libtest_check_no_leaks()); return 0; -- cgit v1.2.3-70-g09d2