Commit Diff


commit - f8b1e9c78bbea3a865bd20b4d3061bc7af5d0d7d
commit + 7b3e353331662b2af1d29a84fe5c1d60b7fdfe88
blob - dd4fa760f7b0417c9999ae7ae64b0f98d3e23059
blob + c510422805e87a2ddd752543c5af9ea57a75e059
--- gotwebd/fcgi.c
+++ gotwebd/fcgi.c
@@ -201,7 +201,7 @@ fcgi_forward_response(int fd, short event, void *arg)
 	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
@@ -20,3 +20,5 @@ const struct got_error *got_poll_read_full_timeout(int
 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
@@ -100,13 +100,19 @@ got_poll_read_full(int fd, size_t *len, void *buf, siz
 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;
 		}