Commit Diff


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);