mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-23 03:19:03 +00:00
pack: free the new pack struct if we fail to insert
If we fail to insert the packfile in the map, make sure to free it. This makes the free function only attempt to remove its mwindows from the global list if we have opened the packfile to avoid accessing the list unlocked.
This commit is contained in:
parent
c61dc1a92e
commit
5e0f47c375
@ -67,6 +67,7 @@ int git_mwindow_get_pack(struct git_pack_file **out, const char *path)
|
||||
|
||||
if (git_mwindow_files_init() < 0) {
|
||||
git_mutex_unlock(&git__mwindow_mutex);
|
||||
git__free(packname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -93,8 +94,10 @@ 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;
|
||||
|
@ -968,10 +968,10 @@ void git_packfile_free(struct git_pack_file *p)
|
||||
|
||||
cache_free(&p->bases);
|
||||
|
||||
git_mwindow_free_all_locked(&p->mwf);
|
||||
|
||||
if (p->mwf.fd >= 0)
|
||||
if (p->mwf.fd >= 0) {
|
||||
git_mwindow_free_all_locked(&p->mwf);
|
||||
p_close(p->mwf.fd);
|
||||
}
|
||||
|
||||
pack_index_free(p);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user