commit - f8b1e9c78bbea3a865bd20b4d3061bc7af5d0d7d
commit + 7b3e353331662b2af1d29a84fe5c1d60b7fdfe88
blob - dd4fa760f7b0417c9999ae7ae64b0f98d3e23059
blob + c510422805e87a2ddd752543c5af9ea57a75e059
--- gotwebd/fcgi.c
+++ gotwebd/fcgi.c
if (r == -1) {
log_warn("read response");
} else {
- err = got_poll_write_full(c->fd, outbuf, r);
+ err = got_poll_write_full_timeout(c->fd, outbuf, r, 1);
if (err) {
log_warnx("forward response: %s", err->msg);
fcgi_cleanup_request(c);
blob - 7f3896a299ca2c51b65a3d3e6c5fafe1452500d2
blob + 5c8b51f1715ca57bc53491048364e8af84bb472f
--- lib/got_lib_poll.h
+++ lib/got_lib_poll.h
const struct got_error *got_poll_read_full(int, size_t *, void *, size_t,
size_t);
const struct got_error *got_poll_write_full(int, const void *, off_t);
+const struct got_error *got_poll_write_full_timeout(int, const void *, off_t,
+ int);
blob - f98dea71e976cc360e1d5c6bc803c2c26f6ffff3
blob + b5377d90fae3d989f5d3aee45517f65385aaa33f
--- lib/pollfd.c
+++ lib/pollfd.c
const struct got_error *
got_poll_write_full(int fd, const void *buf, off_t len)
{
+ return got_poll_write_full_timeout(fd, buf, len, INFTIM);
+}
+
+const struct got_error *
+got_poll_write_full_timeout(int fd, const void *buf, off_t len, int timeout)
+{
const struct got_error *err = NULL;
off_t wlen = 0;
ssize_t w = 0;
while (wlen != len) {
if (wlen > 0) {
- err = got_poll_fd(fd, POLLOUT, INFTIM);
+ err = got_poll_fd(fd, POLLOUT, timeout);
if (err)
return err;
}