commit 74467cc8677eeaf13a4775b925834937eaf16df9 from: Stefan Sperling date: Wed Jun 15 13:53:50 2022 UTC fix handling of pack_fds used by tog's log thread 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();