commit e2752401e9de43f1f8c1e3a1601ec073cccab548 from: Omar Polo via: Thomas Adam date: Wed Feb 16 22:08:24 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 - 4049b748bf8123e8db01bb537b375091eaeb5d80 commit + e2752401e9de43f1f8c1e3a1601ec073cccab548 blob - a7188e594585fd71bd9c7214053d45590d2464fb blob + d4b0bd3eb4f7883233361e8bdb3dab94bfb2e087 --- lib/fetch.c +++ lib/fetch.c @@ -471,7 +471,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 - 1ddbfbd79094402036ca23f218434375d9870239 blob + f284020602937db76c3bdc3f41457af32264ac4f --- lib/gotconfig.c +++ lib/gotconfig.c @@ -107,7 +107,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 - 9b800024ce08645d31fb5ce19d12e77c8bb9f476 blob + 386beeb5dd0d92cab6b196c328e2144a2cb595c2 --- lib/pack.c +++ lib/pack.c @@ -723,7 +723,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 - 456e9852b330bda18541353fefa951d0b54b3155 blob + f14ac56ec988d939e248d0ecc5cfd66deab8b108 --- lib/privsep.c +++ lib/privsep.c @@ -207,6 +207,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; } } @@ -220,8 +221,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; } @@ -244,7 +247,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 - a0442e89b03c4cd371c19155dce9c196ef412870 blob + 81651ea9a69945909619bd8d59a07dba9f31ed06 --- lib/repository.c +++ lib/repository.c @@ -572,7 +572,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 - 4bc2bb94c25ff57783c625f443ade908a45d245c blob + 152d884fac207c0cd24a0d4af25e70dd2bb42a8e --- lib/repository_admin.c +++ lib/repository_admin.c @@ -382,7 +382,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");