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.
This commit is contained in:
Carlos Martín Nieto 2014-09-10 18:28:19 +02:00
parent 31e752b654
commit fdea219a86
2 changed files with 17 additions and 0 deletions

View File

@ -223,6 +223,9 @@ int init_error = 0;
static void cb__free_status(void *st) static void cb__free_status(void *st)
{ {
git_global_st *state = (git_global_st *) st;
git__free(state->error_t.message);
git__free(st); git__free(st);
} }

View File

@ -1,5 +1,6 @@
#include "clar_libgit2.h" #include "clar_libgit2.h"
#include "thread_helpers.h"
#include "cache.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"))); cl_git_pass(git_repository_open(&nested_repo, cl_fixture("testrepo.git")));
git_repository_free(nested_repo); 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);
}