summaryrefslogtreecommitdiffstats
path: root/usr.sbin/httpd/server.c
diff options
context:
space:
mode:
authorreyk <reyk@openbsd.org>2014-08-06 11:24:12 +0000
committerreyk <reyk@openbsd.org>2014-08-06 11:24:12 +0000
commit2cadac13c6ac84d7c92ff89932756918c24116e4 (patch)
treeaed707cdc9539510e62b76d22ac484006b0eae6c /usr.sbin/httpd/server.c
parentBring back the last read (done) / last write (done) messages instead of just (diff)
downloadwireguard-openbsd-2cadac13c6ac84d7c92ff89932756918c24116e4.tar.xz
wireguard-openbsd-2cadac13c6ac84d7c92ff89932756918c24116e4.zip
The watermark exposed a bug in server_write that broke keep-alive
support. Instead of calling server_close from server_write, we have to proceed to the next connection by calling the error handler. OK jsg@
Diffstat (limited to 'usr.sbin/httpd/server.c')
-rw-r--r--usr.sbin/httpd/server.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/usr.sbin/httpd/server.c b/usr.sbin/httpd/server.c
index 6460f357237..77168e95ca3 100644
--- a/usr.sbin/httpd/server.c
+++ b/usr.sbin/httpd/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.33 2014/08/06 09:40:04 reyk Exp $ */
+/* $OpenBSD: server.c,v 1.34 2014/08/06 11:24:12 reyk Exp $ */
/*
* Copyright (c) 2006 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -688,9 +688,11 @@ server_write(struct bufferevent *bev, void *arg)
if (clt->clt_done)
goto done;
+
+ bufferevent_enable(bev, EV_READ);
return;
done:
- server_close(clt, "last write (done)");
+ (*bev->errorcb)(bev, EVBUFFER_WRITE|EVBUFFER_EOF, bev->cbarg);
return;
}
@@ -728,10 +730,9 @@ server_read(struct bufferevent *bev, void *arg)
goto fail;
if (clt->clt_done)
goto done;
- bufferevent_enable(bev, EV_READ);
return;
done:
- server_close(clt, "last read (done)");
+ (*bev->errorcb)(bev, EVBUFFER_READ|EVBUFFER_EOF, bev->cbarg);
return;
fail:
server_close(clt, strerror(errno));