From 9d7281ff1787d83e8e96bb3fc9441ae4cba0cd08 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 5 Jan 2021 00:03:57 +0100 Subject: [PATCH] global_init: debug builds allocates a byte in init ... to make build tools/valgrind warn if no curl_global_cleanup is called. This is conditionally only done for debug builds with the env variable CURL_GLOBAL_INIT set. Closes #6410 --- lib/easy.c | 15 ++++++++++++++- tests/runtests.pl | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/easy.c b/lib/easy.c index 311946bdf1..04e59144ba 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -124,6 +124,10 @@ curl_wcsdup_callback Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup; # pragma warning(default:4232) /* MSVC extension, dllimport identity */ #endif +#ifdef DEBUGBUILD +static char *leakpointer; +#endif + /** * curl_global_init() globally initializes curl given a bitwise set of the * different features of what to initialize. @@ -190,6 +194,12 @@ static CURLcode global_init(long flags, bool memoryfuncs) init_flags = flags; +#ifdef DEBUGBUILD + if(getenv("CURL_GLOBAL_INIT")) + /* alloc data that will leak if *cleanup() is not called! */ + leakpointer = malloc(1); +#endif + return CURLE_OK; fail: @@ -265,6 +275,9 @@ void curl_global_cleanup(void) #ifdef USE_WOLFSSH (void)wolfSSH_Cleanup(); #endif +#ifdef DEBUGBUILD + free(leakpointer); +#endif init_flags = 0; } diff --git a/tests/runtests.pl b/tests/runtests.pl index 6c5edc84d8..0e0e26c3ca 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -381,6 +381,7 @@ if (!$USER) { $ENV{'CURL_MEMDEBUG'} = $memdump; $ENV{'CURL_ENTROPY'}="12345678"; $ENV{'CURL_FORCETIME'}=1; # for debug NTLM magic +$ENV{'CURL_GLOBAL_INIT'}=1; # debug curl_global_init/cleanup use $ENV{'HOME'}=$pwd; $ENV{'COLUMNS'}=79; # screen width!