diff --git a/src/indexer.c b/src/indexer.c index c1d599062..3f6b1076e 100644 --- a/src/indexer.c +++ b/src/indexer.c @@ -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); } diff --git a/src/odb_pack.c b/src/odb_pack.c index 9d0c4c0e7..9779ecd25 100644 --- a/src/odb_pack.c +++ b/src/odb_pack.c @@ -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); diff --git a/src/pack.c b/src/pack.c index dcf9dd178..3490c8bb9 100644 --- a/src/pack.c +++ b/src/pack.c @@ -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); diff --git a/src/pack.h b/src/pack.h index db57e57d2..6c43d8f5b 100644 --- a/src/pack.h +++ b/src/pack.h @@ -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,