[prev in list] [next in list] [prev in thread] [next in thread]
List: varnish-dev
Subject: [PATCH 3/4] Close with a 500 response on client ws overflow.
From: Lasse Karstensen <lkarsten () varnish-software ! com>
Date: 2015-07-31 7:48:45
Message-ID: 20150731074843.GA17898 () immer ! varnish-software ! com
[Download RAW message or body]
---
bin/varnishd/cache/cache_req_fsm.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index 46f777e..0a94850 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -112,6 +112,10 @@ static enum req_fsm_nxt
cnt_deliver(struct worker *wrk, struct req *req)
{
struct busyobj *bo;
+ char r_500[] =
+ "HTTP/1.1 500 Internal Server Error\r\n"
+ "Server: Varnish\r\n"
+ "Connection: close\r\n\r\n";
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
@@ -181,6 +185,28 @@ cnt_deliver(struct worker *wrk, struct req *req)
assert(wrk->handling == VCL_RET_DELIVER);
+ /* Make sure there is room in the ws left for delivery processors
+ * (40 bytes each) and VSL buffering for Etag weakening and SetH().
+ */
+ if (pdiff(req->ws->f, req->ws->e) < sizeof(struct vdp_entry)*3+128) {
+ VSLb(req->vsl, SLT_Error,
+ "Inferred workspace_client overflow.");
+ WS_MarkOverflow(req->ws);
+ }
+
+ if (WS_Overflowed(req->ws)) {
+ VSLb(req->vsl, SLT_Error, "workspace_client overflow");
+ VSLb(req->vsl, SLT_RespProtocol, "HTTP/1.1");
+ VSLb(req->vsl, SLT_RespStatus, "500");
+ VSLb(req->vsl, SLT_RespReason, "Internal Server Error");
+
+ (void)write(req->sp->fd, r_500, strlen(r_500));
+ VSLb_ts_req(req, "Resp", W_TIM_real(wrk));
+ http_Teardown(req->resp);
+ SES_Close(req->sp, SC_OVERLOAD);
+ return (REQ_FSM_DONE);
+ }
+
if (!(req->objcore->flags & OC_F_PASS)
&& req->esi_level == 0
&& http_IsStatus(req->resp, 200)
--
2.1.4
--
Lasse Karstensen
Varnish Software AS
_______________________________________________
varnish-dev mailing list
varnish-dev@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic