commit - 28f88a8012eef7b02f7ada4a4e8a89d1d4342f70
commit + 940b434ba83d5c4db2de3ce75baab3b5dd4279d3
blob - ee4eb5cff4be8f41919997710c1933d9d70f9d98
blob + f0e5419c253f15beee2a1ca1138b1d12778cb3f2
--- gotd/repo_write.c
+++ gotd/repo_write.c
if (event & EV_READ) {
if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN)
fatal("imsg_read error");
- if (n == 0) /* Connection closed. */
+ if (n == 0) { /* Connection closed. */
shut = 1;
+ goto done;
+ }
}
if (event & EV_WRITE) {
n = msgbuf_write(&ibuf->w);
if (n == -1 && errno != EAGAIN)
fatal("msgbuf_write");
- if (n == 0) /* Connection closed. */
+ if (n == 0) { /* Connection closed. */
shut = 1;
+ goto done;
+ }
}
- while (err == NULL && check_cancelled(NULL) == NULL) {
+ while (err == NULL) {
+ err = check_cancelled(NULL);
+ if (err)
+ break;
if ((n = imsg_get(ibuf, &imsg)) == -1)
fatal("%s: imsg_get", __func__);
if (n == 0) /* No more messages. */
break;
default:
log_debug("unexpected imsg %d", imsg.hdr.type);
+ err = got_error(GOT_ERR_PRIVSEP_MSG);
break;
}
imsg_free(&imsg);
}
- if (!shut && check_cancelled(NULL) == NULL) {
- if (err &&
- gotd_imsg_send_error_event(iev, PROC_REPO_WRITE,
- client->id, err) == -1) {
- log_warnx("could not send error to parent: %s",
- err->msg);
- }
+ if (err && gotd_imsg_send_error_event(iev, PROC_REPO_WRITE,
+ client->id, err) == -1)
+ log_warnx("could not send error to parent: %s", err->msg);
+done:
+ if (!shut) {
gotd_imsg_event_add(iev);
} else {
/* This pipe is dead. Remove its event handler */