commit 8934ea8b1b31166ea1f3f857e6f51f8dd6a999a2 from: Omar Polo date: Mon Feb 14 13:14:36 2022 UTC factorize imsg_clear calls after imsg_flush failures imsg_clear frees and closes resources allocated as part of enqueueing imsgs so it's a no-op after reads. discussed with and ok stsp@ commit - 688fe08b75a31d11eaf64a44751f903bdfa61b68 commit + 8934ea8b1b31166ea1f3f857e6f51f8dd6a999a2 blob - 66bbb446389b857c55aa7f47ab02c895a18b660b blob + e557ed1517eb0150936c27521720d73e1dc76d88 --- lib/fetch.c +++ lib/fetch.c @@ -476,7 +476,6 @@ got_fetch_pack(struct got_object_id **pack_hash, struc if (err) break; } - imsg_clear(&idxibuf); } if (close(imsg_idxfds[0]) == -1) { err = got_error_from_errno("close"); blob - 664f170821f75b4356a1f141c1aebcf860ac1868 blob + ab884984fe1018932f9071e31e6880538386570d --- lib/gotconfig.c +++ lib/gotconfig.c @@ -108,7 +108,6 @@ got_gotconfig_read(struct got_gotconfig **conf, const if (err) goto done; - imsg_clear(ibuf); err = got_privsep_send_stop(imsg_fds[0]); child_err = got_privsep_wait_for_child(pid); if (child_err && err == NULL) blob - c981da3572edb6919e64e8fa50227b8ab99e0702 blob + b8079437462b9ff19d788ec0bc2b4da195662c09 --- lib/pack.c +++ lib/pack.c @@ -727,7 +727,6 @@ pack_stop_privsep_child(struct got_pack *pack) err = got_privsep_wait_for_child(pack->privsep_child->pid); if (close(pack->privsep_child->imsg_fd) == -1 && err == NULL) err = got_error_from_errno("close"); - imsg_clear(pack->privsep_child->ibuf); free(pack->privsep_child->ibuf); free(pack->privsep_child); pack->privsep_child = NULL; blob - 48e50b65411ba0b6ffccd2853fe7f30044f9f398 blob + 4cbc40e6f66cdf7a166db6612c052858ffaba1b6 --- lib/privsep.c +++ lib/privsep.c @@ -208,6 +208,7 @@ got_privsep_send_error(struct imsgbuf *ibuf, const str if (ret == -1) { fprintf(stderr, "%s: error %d \"%s\": imsg_flush: %s\n", getprogname(), err->code, err->msg, strerror(errno)); + imsg_clear(ibuf); return; } } @@ -221,8 +222,10 @@ flush_imsg(struct imsgbuf *ibuf) if (err) return err; - if (imsg_flush(ibuf) == -1) + if (imsg_flush(ibuf) == -1) { + imsg_clear(ibuf); return got_error_from_errno("imsg_flush"); + } return NULL; } @@ -245,7 +248,6 @@ got_privsep_send_stop(int fd) return got_error_from_errno("imsg_compose STOP"); err = flush_imsg(&ibuf); - imsg_clear(&ibuf); return err; } blob - 255d035fd6d1b3bd7f0720a14a8463799f261c61 blob + 52605751687dfacb015e943762eb3bfc59fcdfd7 --- lib/repository.c +++ lib/repository.c @@ -577,7 +577,6 @@ parse_gitconfig_file(int *gitconfig_repository_format_ goto done; } - imsg_clear(ibuf); err = got_privsep_send_stop(imsg_fds[0]); child_err = got_privsep_wait_for_child(pid); if (child_err && err == NULL) blob - 422da924a77fc3864bcdfbc5e266f568fab8cef3 blob + c1adcc4de91fadddf5e049d93cc9a744c07579bf --- lib/repository_admin.c +++ lib/repository_admin.c @@ -387,7 +387,6 @@ got_repo_index_pack(FILE *packfile, struct got_object_ if (err) break; } - imsg_clear(&idxibuf); } if (close(imsg_idxfds[0]) == -1) { err = got_error_from_errno("close");