From 25c8555135e10a4ae56d27b6eb42dce7ff97a8ed Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Thu, 9 Aug 2012 19:26:25 +0200 Subject: [PATCH] fixed some invalid free I introduced when running binaries without command line arguments --- lib/BasicsC/process-utils.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/BasicsC/process-utils.c b/lib/BasicsC/process-utils.c index c906882001..02abc22794 100644 --- a/lib/BasicsC/process-utils.c +++ b/lib/BasicsC/process-utils.c @@ -153,6 +153,12 @@ static bool IsEnvironmentEnlarged = false; static size_t MaximalProcessTitleSize = 0; +//////////////////////////////////////////////////////////////////////////////// +/// @brief do we need to free the copy of the environ data on shutdown +//////////////////////////////////////////////////////////////////////////////// + +static bool MustFreeEnvironment = false; + //////////////////////////////////////////////////////////////////////////////// /// @} //////////////////////////////////////////////////////////////////////////////// @@ -343,6 +349,7 @@ void TRI_SetProcessTitle (char const* title) { newEnviron[i] = NULL; environ = newEnviron; + MustFreeEnvironment = true; } IsEnvironmentEnlarged = true; @@ -395,10 +402,12 @@ void TRI_InitialiseProcess (int argc, char* argv[]) { void TRI_ShutdownProcess () { TRI_FreeString(TRI_CORE_MEM_ZONE, ProcessName); - if (environ) { - // free all arguments copied for environ + if (MustFreeEnvironment) { size_t i = 0; + assert(environ); + // free all arguments copied for environ + while (environ[i]) { TRI_FreeString(TRI_CORE_MEM_ZONE, environ[i]); ++i;