From fdea219a86d12c802b8d7fa73445940770bb1b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 10 Sep 2014 18:28:19 +0200 Subject: global: free the error message when exiting a thread When we free the global state at thread termination, we must also free the error message in order not to leak the string once per thread. --- src/global.c | 3 +++ tests/threads/basic.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/global.c b/src/global.c index f89c73256..4a0b680ef 100644 --- a/src/global.c +++ b/src/global.c @@ -223,6 +223,9 @@ int init_error = 0; static void cb__free_status(void *st) { + git_global_st *state = (git_global_st *) st; + git__free(state->error_t.message); + git__free(st); } diff --git a/tests/threads/basic.c b/tests/threads/basic.c index a329ee7f9..eb15293c7 100644 --- a/tests/threads/basic.c +++ b/tests/threads/basic.c @@ -1,5 +1,6 @@ #include "clar_libgit2.h" +#include "thread_helpers.h" #include "cache.h" @@ -34,3 +35,16 @@ void test_threads_basic__multiple_init(void) cl_git_pass(git_repository_open(&nested_repo, cl_fixture("testrepo.git"))); git_repository_free(nested_repo); } + +static void *set_error(void *dummy) +{ + giterr_set(GITERR_INVALID, "oh no, something happened!\n"); + + return dummy; +} + +/* Set errors so we can check that we free it */ +void test_threads_basic__set_error(void) +{ + run_in_parallel(1, 4, set_error, NULL, NULL); +} -- cgit v1.2.1