Commit bf339ab0 by Edward Thomson

indexer: introduce `git_packfile_close`

Encapsulation!
parent 98f53872
......@@ -1091,17 +1091,10 @@ void git_indexer_free(git_indexer *idx)
git_vector_free_deep(&idx->deltas);
/* Try to delete the temporary file in case it was not committed. */
git_mwindow_free_all(&idx->pack->mwf);
/* We need to close the descriptor here so Windows doesn't choke on unlink */
if (idx->pack->mwf.fd != -1)
p_close(idx->pack->mwf.fd);
if (!git_mutex_lock(&git__mwindow_mutex)) {
if (!idx->pack_committed)
p_unlink(idx->pack->pack_name);
git_packfile_close(idx->pack, true);
if (!git_mutex_lock(&git__mwindow_mutex)) {
git_packfile_free(idx->pack);
git_mutex_unlock(&git__mwindow_mutex);
}
......
......@@ -991,6 +991,18 @@ git_off_t get_delta_base(
*
***********************************************************/
void git_packfile_close(struct git_pack_file *p, bool unlink_packfile)
{
if (p->mwf.fd >= 0) {
git_mwindow_free_all_locked(&p->mwf);
p_close(p->mwf.fd);
p->mwf.fd = -1;
}
if (unlink_packfile)
p_unlink(p->pack_name);
}
void git_packfile_free(struct git_pack_file *p)
{
if (!p)
......@@ -998,10 +1010,7 @@ 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);
p_close(p->mwf.fd);
}
git_packfile_close(p, false);
pack_index_free(p);
......
......@@ -149,6 +149,7 @@ git_off_t get_delta_base(struct git_pack_file *p, git_mwindow **w_curs,
git_off_t *curpos, git_otype type,
git_off_t delta_obj_offset);
void git_packfile_close(struct git_pack_file *p, bool unlink_packfile);
void git_packfile_free(struct git_pack_file *p);
int git_packfile_alloc(struct git_pack_file **pack_out, const char *path);
......
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