Commit Diff


commit - 0ae84acc1f0a0584e4f26ccbe029c895043b3abe
commit + 74467cc8677eeaf13a4775b925834937eaf16df9
blob - 9018516f932ee548ec87c8bc079aee935759ede9
blob + 32fc9548bcc13a21a33c63b7a19406ee6ee017a4
--- tog/tog.c
+++ tog/tog.c
@@ -338,6 +338,7 @@ struct tog_log_thread_args {
 	const char *in_repo_path;
 	struct got_object_id *start_id;
 	struct got_repository *repo;
+	int *pack_fds;
 	int log_complete;
 	sig_atomic_t *quit;
 	struct commit_queue_entry **first_displayed_entry;
@@ -2160,6 +2161,14 @@ stop_log_thread(struct tog_log_view_state *s)
 	if (s->thread_args.repo) {
 		err = got_repo_close(s->thread_args.repo);
 		s->thread_args.repo = NULL;
+	}
+
+	if (s->thread_args.pack_fds) {
+		const struct got_error *pack_err =
+		    got_repo_pack_fds_close(s->thread_args.pack_fds);
+		if (err == NULL)
+			err = pack_err;
+		s->thread_args.pack_fds = NULL;
 	}
 
 	if (s->thread_args.graph) {
@@ -2318,7 +2327,6 @@ open_log_view(struct tog_view *view, struct got_object
 	struct got_repository *thread_repo = NULL;
 	struct got_commit_graph *thread_graph = NULL;
 	int errcode;
-	int *pack_fds = NULL;
 
 	if (in_repo_path != s->in_repo_path) {
 		free(s->in_repo_path);
@@ -2372,11 +2380,13 @@ open_log_view(struct tog_view *view, struct got_object
 	view->search_start = search_start_log_view;
 	view->search_next = search_next_log_view;
 
-	err = got_repo_pack_fds_open(&pack_fds);
-	if (err)
-		goto done;
+	if (s->thread_args.pack_fds == NULL) {
+		err = got_repo_pack_fds_open(&s->thread_args.pack_fds);
+		if (err)
+			goto done;
+	}
 	err = got_repo_open(&thread_repo, got_repo_get_path(repo), NULL,
-	    pack_fds);
+	    s->thread_args.pack_fds);
 	if (err)
 		goto done;
 	err = got_commit_graph_open(&thread_graph, s->in_repo_path,
@@ -2413,12 +2423,6 @@ open_log_view(struct tog_view *view, struct got_object
 	s->thread_args.search_next_done = &view->search_next_done;
 	s->thread_args.regex = &view->regex;
 done:
-	if (pack_fds) {
-		const struct got_error *pack_err =
-		    got_repo_pack_fds_close(pack_fds);
-		if (err == NULL)
-			err = pack_err;
-	}
 	if (err)
 		close_log_view(view);
 	return err;
@@ -2454,7 +2458,6 @@ input_log_view(struct tog_view **new_view, struct tog_
 	struct tog_view *ref_view = NULL;
 	struct commit_queue_entry *entry;
 	int begin_x = 0, n, nscroll = view->nlines - 1;
-	int *pack_fds = NULL;
 
 	if (s->thread_args.load_all) {
 		if (ch == KEY_BACKSPACE)
@@ -2655,14 +2658,9 @@ input_log_view(struct tog_view **new_view, struct tog_
 		} else /* 'B' */
 			s->log_branches = !s->log_branches;
 
-		err = got_repo_pack_fds_open(&pack_fds);
-		if (err)
-			return err;
-		err = got_repo_open(&s->thread_args.repo,
-		    got_repo_get_path(s->repo), NULL, pack_fds);
-		if (err)
-			return err;
-		err = got_repo_pack_fds_close(pack_fds);
+		err = got_repo_open(&s->thread_args.repo,
+		    got_repo_get_path(s->repo), NULL,
+		    s->thread_args.pack_fds);
 		if (err)
 			return err;
 		tog_free_refs();