Commit 96c9b9f0 by Carlos Martín Nieto

indexer: properly free the packfile resources

The indexer needs to call the packfile's free function so it takes care of
freeing the caches.

We still need to close the mwf descriptor manually so we can rename the
packfile into its final name on Windows.
parent e2d2c6e5
......@@ -706,7 +706,9 @@ int git_indexer_stream_finalize(git_indexer_stream *idx, git_transfer_progress *
goto on_error;
git_mwindow_free_all(&idx->pack->mwf);
/* We need to close the descriptor here so Windows doesn't choke on commit_at */
p_close(idx->pack->mwf.fd);
idx->pack->mwf.fd = -1;
if (index_path_stream(&filename, idx, ".pack") < 0)
goto on_error;
......@@ -719,7 +721,6 @@ int git_indexer_stream_finalize(git_indexer_stream *idx, git_transfer_progress *
on_error:
git_mwindow_free_all(&idx->pack->mwf);
p_close(idx->pack->mwf.fd);
git_filebuf_cleanup(&idx->index_file);
git_buf_free(&filename);
git_hash_ctx_cleanup(&ctx);
......@@ -747,7 +748,7 @@ void git_indexer_stream_free(git_indexer_stream *idx)
git_vector_foreach(&idx->deltas, i, delta)
git__free(delta);
git_vector_free(&idx->deltas);
git__free(idx->pack);
git_packfile_free(idx->pack);
git__free(idx);
}
......@@ -1051,7 +1052,6 @@ void git_indexer_free(git_indexer *idx)
if (idx == NULL)
return;
p_close(idx->pack->mwf.fd);
git_mwindow_file_deregister(&idx->pack->mwf);
git_vector_foreach(&idx->objects, i, e)
git__free(e);
......@@ -1059,7 +1059,7 @@ void git_indexer_free(git_indexer *idx)
git_vector_foreach(&idx->pack->cache, i, pe)
git__free(pe);
git_vector_free(&idx->pack->cache);
git__free(idx->pack);
git_packfile_free(idx->pack);
git__free(idx);
}
......@@ -538,7 +538,7 @@ static void pack_backend__free(git_odb_backend *_backend)
for (i = 0; i < backend->packs.length; ++i) {
struct git_pack_file *p = git_vector_get(&backend->packs, i);
packfile_free(p);
git_packfile_free(p);
}
git_vector_free(&backend->packs);
......
......@@ -794,7 +794,7 @@ static struct git_pack_file *packfile_alloc(size_t extra)
}
void packfile_free(struct git_pack_file *p)
void git_packfile_free(struct git_pack_file *p)
{
assert(p);
......
......@@ -139,7 +139,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 packfile_free(struct git_pack_file *p);
void git_packfile_free(struct git_pack_file *p);
int git_packfile_check(struct git_pack_file **pack_out, const char *path);
int git_pack_entry_find(
struct git_pack_entry *e,
......
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