Commit 5e0f47c3 by Carlos Martín Nieto

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.
parent c61dc1a9
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment