commit 5a950d099a15fa3dc29590f3a8e90de9d6e1972b from: Stefan Sperling date: Wed Jun 15 14:27:20 2022 UTC using a local packfd variable in open_worktree() is sufficient commit - d188eb1946acd5671794bb6cbdd256d7b962a669 commit + 5a950d099a15fa3dc29590f3a8e90de9d6e1972b blob - 414cf45f495487020f948b4b0c3e6a45ef730da9 blob + a35884552cf66d678f0db623e1dd92d976a7014e --- lib/got_lib_worktree.h +++ lib/got_lib_worktree.h @@ -22,7 +22,6 @@ struct got_worktree { struct got_object_id *base_commit_id; char *head_ref_name; uuid_t uuid; - int *pack_fds; /* * File descriptor for the lock file, open while a work tree is open. blob - 8178c5fa66d216143d6c46befa61dc365b4afe68 blob + 529f4b6767b84a31e24d93b402c6a3c8226cdd74 --- lib/worktree_open.c +++ lib/worktree_open.c @@ -116,6 +116,7 @@ open_worktree(struct got_worktree **worktree, const ch int version, fd = -1; const char *errstr; struct got_repository *repo = NULL; + int *pack_fds = NULL; uint32_t uuid_status; *worktree = NULL; @@ -190,12 +191,11 @@ open_worktree(struct got_worktree **worktree, const ch goto done; } - err = got_repo_pack_fds_open(&(*worktree)->pack_fds); + err = got_repo_pack_fds_open(&pack_fds); if (err) goto done; - err = got_repo_open(&repo, (*worktree)->repo_path, NULL, - (*worktree)->pack_fds); + err = got_repo_open(&repo, (*worktree)->repo_path, NULL, pack_fds); if (err) goto done; @@ -230,6 +230,12 @@ done: const struct got_error *close_err = got_repo_close(repo); if (err == NULL) err = close_err; + } + if (pack_fds) { + const struct got_error *pack_err = + got_repo_pack_fds_close(pack_fds); + if (err == NULL) + err = pack_err; } free(path_got); free(path_lock); @@ -301,12 +307,6 @@ got_worktree_close(struct got_worktree *worktree) if (close(worktree->root_fd) == -1 && err == NULL) err = got_error_from_errno2("close", got_worktree_get_root_path(worktree)); - if (worktree->pack_fds) { - const struct got_error *pack_err = - got_repo_pack_fds_close(worktree->pack_fds); - if (err == NULL) - err = pack_err; - } free(worktree->repo_path); free(worktree->path_prefix); free(worktree->base_commit_id);