From 92cb4099c46f62f537db93a59c3141bce1355924 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Thu, 22 May 2014 14:21:09 +0200 Subject: concat-deps: Clean up memory at exit when run with lsan Change-Id: I66ccb5332e6c5eceb2f199911ebd4296c93cac4b --- solenv/bin/concat-deps.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'solenv') diff --git a/solenv/bin/concat-deps.c b/solenv/bin/concat-deps.c index 439deb9848d0..4a2230988a91 100644 --- a/solenv/bin/concat-deps.c +++ b/solenv/bin/concat-deps.c @@ -74,6 +74,8 @@ #include #endif +#include + /* modes */ #ifdef __windows #define FILE_O_RDONLY _O_RDONLY @@ -590,6 +592,11 @@ off_t size = -1; return size; } +#if !ENABLE_RUNTIME_OPTIMIZATIONS +static void * file_load_buffers[100]; +static size_t file_load_buffer_count = 0; +#endif + static char* file_load(const char* name, off_t* size, int* return_rc) { off_t local_size = 0; @@ -610,6 +617,20 @@ int fd; if (!(fd == -1)) { buffer = malloc((size_t)(*size + 1)); +#if !ENABLE_RUNTIME_OPTIMIZATIONS + if (buffer != NULL) + { + if (file_load_buffer_count == 100) + { + free(buffer); + buffer = NULL; + } + else + { + file_load_buffers[file_load_buffer_count++] = buffer; + } + } +#endif if (buffer == NULL) { rc = ENOMEM; @@ -1089,7 +1110,7 @@ off_t in_list_size = 0; char* in_list; char* in_list_cursor; char* in_list_base; -struct hash* dep_hash; +struct hash* dep_hash = 0; const char *env_str; if(argc < 2) @@ -1149,6 +1170,13 @@ const char *env_str; dep_hash->collisions, dep_hash->memcmp, dep_hash->cost); #endif } +#if !ENABLE_RUNTIME_OPTIMIZATIONS + hash_destroy(dep_hash); + for (size_t i = 0; i != file_load_buffer_count; ++i) + { + free(file_load_buffers[i]); + } +#endif return rc; } -- cgit