mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-21 20:14:44 +00:00
commit
86cb34cb11
@ -62,11 +62,14 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
|
||||
if ((error = git_packfile__name(&packname, path)) < 0)
|
||||
return error;
|
||||
|
||||
if (git_mutex_lock(&git__mwindow_mutex) < 0)
|
||||
if (git_mutex_lock(&git__mwindow_mutex) < 0) {
|
||||
giterr_set(GITERR_OS, "failed to lock mwindow mutex");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (git_mwindow_files_init() < 0) {
|
||||
git_mutex_unlock(&git__mwindow_mutex);
|
||||
git__free(packname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -93,31 +96,29 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
|
||||
git_strmap_insert(git__pack_cache, pack->pack_name, pack, error);
|
||||
git_mutex_unlock(&git__mwindow_mutex);
|
||||
|
||||
if (error < 0)
|
||||
if (error < 0) {
|
||||
git_packfile_free(pack);
|
||||
return -1;
|
||||
}
|
||||
|
||||
*out = pack;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int git_mwindow_put_pack(struct git_pack_file *pack)
|
||||
void git_mwindow_put_pack(struct git_pack_file *pack)
|
||||
{
|
||||
int count;
|
||||
git_strmap_iter pos;
|
||||
|
||||
if (git_mutex_lock(&git__mwindow_mutex) < 0)
|
||||
return -1;
|
||||
return;
|
||||
|
||||
if (git_mwindow_files_init() < 0) {
|
||||
git_mutex_unlock(&git__mwindow_mutex);
|
||||
return -1;
|
||||
}
|
||||
/* put before get would be a corrupted state */
|
||||
assert(git__pack_cache);
|
||||
|
||||
pos = git_strmap_lookup_index(git__pack_cache, pack->pack_name);
|
||||
if (!git_strmap_valid_index(git__pack_cache, pos)) {
|
||||
git_mutex_unlock(&git__mwindow_mutex);
|
||||
return GIT_ENOTFOUND;
|
||||
}
|
||||
/* if we cannot find it, the state is corrupted */
|
||||
assert(git_strmap_valid_index(git__pack_cache, pos));
|
||||
|
||||
count = git_atomic_dec(&pack->refcount);
|
||||
if (count == 0) {
|
||||
@ -126,7 +127,7 @@ int git_mwindow_put_pack(struct git_pack_file *pack)
|
||||
}
|
||||
|
||||
git_mutex_unlock(&git__mwindow_mutex);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
void git_mwindow_free_all(git_mwindow_file *mwf)
|
||||
|
@ -48,6 +48,6 @@ void git_mwindow_files_free(void);
|
||||
|
||||
struct git_pack_file; /* just declaration to avoid cyclical includes */
|
||||
int git_mwindow_get_pack(struct git_pack_file **out, const char *path);
|
||||
int git_mwindow_put_pack(struct git_pack_file *pack);
|
||||
void git_mwindow_put_pack(struct git_pack_file *pack);
|
||||
|
||||
#endif
|
||||
|
@ -968,10 +968,10 @@ void git_packfile_free(struct git_pack_file *p)
|
||||
|
||||
cache_free(&p->bases);
|
||||
|
||||
if (p->mwf.fd >= 0) {
|
||||
git_mwindow_free_all_locked(&p->mwf);
|
||||
|
||||
if (p->mwf.fd >= 0)
|
||||
p_close(p->mwf.fd);
|
||||
}
|
||||
|
||||
pack_index_free(p);
|
||||
|
||||
|
@ -466,6 +466,7 @@ static int append_entry(
|
||||
|
||||
git_strmap_insert(bld->map, entry->filename, entry, error);
|
||||
if (error < 0) {
|
||||
git_tree_entry_free(entry);
|
||||
giterr_set(GITERR_TREE, "failed to append entry %s to the tree builder", filename);
|
||||
return -1;
|
||||
}
|
||||
@ -622,6 +623,7 @@ int git_treebuilder_create(git_treebuilder **builder_p, const git_tree *source)
|
||||
GITERR_CHECK_ALLOC(bld);
|
||||
|
||||
if (git_strmap_alloc(&bld->map) < 0) {
|
||||
git__free(bld);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user