summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2014-09-29 10:29:00 -0400
committerEdward Thomson <ethomson@edwardthomson.com>2014-09-29 10:29:00 -0400
commitced843f417d882aa212317c722d5fed1502585b7 (patch)
tree51d152f328066f179785a960853747b46b0c6ef3
parentcb4a956b9c20f2b7be404983e7bd156c772f4f64 (diff)
parentfdea219a86d12c802b8d7fa73445940770bb1b61 (diff)
downloadlibgit2-ced843f417d882aa212317c722d5fed1502585b7.tar.gz
Merge pull request #2559 from libgit2/cmn/free-tls-error
global: free the error message when exiting a thread
-rw-r--r--src/global.c3
-rw-r--r--tests/threads/basic.c14
2 files changed, 17 insertions, 0 deletions
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);
+}