diff options
author | Edward Thomson <ethomson@github.com> | 2016-08-04 11:51:06 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-04 11:51:06 -0400 |
commit | da7f9feb5c964dacfe39615d421a3ffd0b20b953 (patch) | |
tree | c75f67c562f78abb207964f8debba8f07ae6e380 | |
parent | baa87dfc5033364ab5ac71099725f8f6c3e6361c (diff) | |
parent | 2381d9e4900050f879cedf851c0329440db7c5e3 (diff) | |
download | libgit2-da7f9feb5c964dacfe39615d421a3ffd0b20b953.tar.gz |
Merge pull request #3879 from libgit2/ethomson/mwindow_init
mwindow: init mwindow files in git_libgit2_init
-rw-r--r-- | src/global.c | 5 | ||||
-rw-r--r-- | src/mwindow.c | 27 | ||||
-rw-r--r-- | src/mwindow.h | 3 | ||||
-rw-r--r-- | src/odb_pack.c | 3 |
4 files changed, 12 insertions, 26 deletions
diff --git a/src/global.c b/src/global.c index eee0aea57..45b1ab8f6 100644 --- a/src/global.c +++ b/src/global.c @@ -61,8 +61,9 @@ static int init_common(void) (ret = git_sysdir_global_init()) == 0 && (ret = git_filter_global_init()) == 0 && (ret = git_merge_driver_global_init()) == 0 && - (ret = git_transport_ssh_global_init()) == 0) - ret = git_openssl_stream_global_init(); + (ret = git_transport_ssh_global_init()) == 0 && + (ret = git_openssl_stream_global_init()) == 0) + ret = git_mwindow_global_init(); GIT_MEMORY_BARRIER; diff --git a/src/mwindow.c b/src/mwindow.c index d3e9be78b..8a5b5caee 100644 --- a/src/mwindow.c +++ b/src/mwindow.c @@ -33,25 +33,20 @@ static git_mwindow_ctl mem_ctl; /* Global list of mwindow files, to open packs once across repos */ git_strmap *git__pack_cache = NULL; -/** - * Run under mwindow lock - */ -int git_mwindow_files_init(void) +static void git_mwindow_files_free(void) { - if (git__pack_cache) - return 0; - - git__on_shutdown(git_mwindow_files_free); + git_strmap *tmp = git__pack_cache; - return git_strmap_alloc(&git__pack_cache); + git__pack_cache = NULL; + git_strmap_free(tmp); } -void git_mwindow_files_free(void) +int git_mwindow_global_init(void) { - git_strmap *tmp = git__pack_cache; + assert(!git__pack_cache); - git__pack_cache = NULL; - git_strmap_free(tmp); + git__on_shutdown(git_mwindow_files_free); + return git_strmap_alloc(&git__pack_cache); } int git_mwindow_get_pack(struct git_pack_file **out, const char *path) @@ -69,12 +64,6 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path) return -1; } - if (git_mwindow_files_init() < 0) { - git_mutex_unlock(&git__mwindow_mutex); - git__free(packname); - return -1; - } - pos = git_strmap_lookup_index(git__pack_cache, packname); git__free(packname); diff --git a/src/mwindow.h b/src/mwindow.h index 63418e458..bdde9e0a4 100644 --- a/src/mwindow.h +++ b/src/mwindow.h @@ -43,8 +43,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf); void git_mwindow_file_deregister(git_mwindow_file *mwf); void git_mwindow_close(git_mwindow **w_cursor); -int git_mwindow_files_init(void); -void git_mwindow_files_free(void); +extern int git_mwindow_global_init(void); struct git_pack_file; /* just declaration to avoid cyclical includes */ int git_mwindow_get_pack(struct git_pack_file **out, const char *path); diff --git a/src/odb_pack.c b/src/odb_pack.c index 244e12bc3..005d07264 100644 --- a/src/odb_pack.c +++ b/src/odb_pack.c @@ -591,9 +591,6 @@ int git_odb_backend_pack(git_odb_backend **backend_out, const char *objects_dir) struct pack_backend *backend = NULL; git_buf path = GIT_BUF_INIT; - if (git_mwindow_files_init() < 0) - return -1; - if (pack_backend__alloc(&backend, 8) < 0) return -1; |