summaryrefslogtreecommitdiff
path: root/src/global.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-07-26 21:12:00 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-07-28 09:31:00 +0200
commitf85fc367e01eb0f5918263b1fcdfc8b7d16065c1 (patch)
tree3c78c3f0d4720b186a56f79c55cd3f31dc530fe5 /src/global.c
parent2dfd5eae33e079bc92a15ccfd561901ea7b69e45 (diff)
downloadlibgit2-cmn/error-buffer.tar.gz
error: store the error messages in a reusable buffercmn/error-buffer
Instead of allocating a brand new buffer for each error string we want to store, we can use a per-thread buffer to store the error string and re-use the underlying storage. We already use the buffer to format the string, so this mostly makes that more direct.
Diffstat (limited to 'src/global.c')
-rw-r--r--src/global.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/global.c b/src/global.c
index 37a47bd27..3d37ee4de 100644
--- a/src/global.c
+++ b/src/global.c
@@ -279,18 +279,19 @@ int git_libgit2_shutdown(void)
git_global_st *git__global_state(void)
{
- void *ptr;
+ git_global_st *ptr;
assert(git_atomic_get(&git__n_inits) > 0);
if ((ptr = TlsGetValue(_tls_index)) != NULL)
return ptr;
- ptr = git__malloc(sizeof(git_global_st));
+ ptr = git__calloc(1, sizeof(git_global_st));
if (!ptr)
return NULL;
- memset(ptr, 0x0, sizeof(git_global_st));
+ git_buf_init(&ptr->error_buf, 0);
+
TlsSetValue(_tls_index, ptr);
return ptr;
}
@@ -378,18 +379,18 @@ int git_libgit2_shutdown(void)
git_global_st *git__global_state(void)
{
- void *ptr;
+ git_global_st *ptr;
assert(git_atomic_get(&git__n_inits) > 0);
if ((ptr = pthread_getspecific(_tls_key)) != NULL)
return ptr;
- ptr = git__malloc(sizeof(git_global_st));
+ ptr = git__calloc(1, sizeof(git_global_st));
if (!ptr)
return NULL;
- memset(ptr, 0x0, sizeof(git_global_st));
+ git_buf_init(&ptr->error_buf, 0);
pthread_setspecific(_tls_key, ptr);
return ptr;
}
@@ -407,6 +408,7 @@ int git_libgit2_init(void)
ssl_inited = 1;
}
+ git_buf_init(&__state.error_buf, 0);
return git_atomic_inc(&git__n_inits);
}