Commit c7991588 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Avoid the indirection of the bereq,beresp and resp http structures,

it no longer saves us memory.
parent a9dc4a2a
...@@ -271,7 +271,6 @@ struct worker { ...@@ -271,7 +271,6 @@ struct worker {
struct http_conn htc[1]; struct http_conn htc[1];
struct ws ws[1]; struct ws ws[1];
struct http *http[3];
struct http *bereq; struct http *bereq;
struct http *beresp; struct http *beresp;
struct http *resp; struct http *resp;
......
...@@ -213,7 +213,6 @@ cnt_deliver(struct sess *sp) ...@@ -213,7 +213,6 @@ cnt_deliver(struct sess *sp)
sp->obj->last_lru = sp->t_resp; sp->obj->last_lru = sp->t_resp;
sp->obj->last_use = sp->t_resp; /* XXX: locking ? */ sp->obj->last_use = sp->t_resp; /* XXX: locking ? */
} }
sp->wrk->resp = sp->wrk->http[2];
http_Setup(sp->wrk->resp, sp->wrk->ws); http_Setup(sp->wrk->resp, sp->wrk->ws);
RES_BuildHttp(sp); RES_BuildHttp(sp);
VCL_deliver_method(sp); VCL_deliver_method(sp);
...@@ -227,9 +226,9 @@ cnt_deliver(struct sess *sp) ...@@ -227,9 +226,9 @@ cnt_deliver(struct sess *sp)
AZ(sp->obj); AZ(sp->obj);
sp->restarts++; sp->restarts++;
sp->director = NULL; sp->director = NULL;
sp->wrk->bereq = NULL; http_Setup(sp->wrk->bereq, NULL);
sp->wrk->beresp = NULL; http_Setup(sp->wrk->beresp, NULL);
sp->wrk->resp = NULL; http_Setup(sp->wrk->resp, NULL);
sp->step = STP_RECV; sp->step = STP_RECV;
return (0); return (0);
default: default:
...@@ -243,7 +242,7 @@ cnt_deliver(struct sess *sp) ...@@ -243,7 +242,7 @@ cnt_deliver(struct sess *sp)
AZ(sp->wrk->wfd); AZ(sp->wrk->wfd);
(void)HSH_Deref(sp->wrk, NULL, &sp->obj); (void)HSH_Deref(sp->wrk, NULL, &sp->obj);
sp->wrk->resp = NULL; http_Setup(sp->wrk->resp, NULL);
sp->step = STP_DONE; sp->step = STP_DONE;
return (0); return (0);
} }
...@@ -425,7 +424,7 @@ cnt_error(struct sess *sp) ...@@ -425,7 +424,7 @@ cnt_error(struct sess *sp)
assert(sp->handling == VCL_RET_DELIVER); assert(sp->handling == VCL_RET_DELIVER);
sp->err_code = 0; sp->err_code = 0;
sp->err_reason = NULL; sp->err_reason = NULL;
sp->wrk->bereq = NULL; http_Setup(sp->wrk->bereq, NULL);
sp->step = STP_DELIVER; sp->step = STP_DELIVER;
return (0); return (0);
} }
...@@ -477,8 +476,6 @@ cnt_fetch(struct sess *sp) ...@@ -477,8 +476,6 @@ cnt_fetch(struct sess *sp)
AZ(sp->wrk->h_content_length); AZ(sp->wrk->h_content_length);
AZ(sp->wrk->do_close); AZ(sp->wrk->do_close);
/* sp->wrk->http[0] is (still) bereq */
sp->wrk->beresp = sp->wrk->http[1];
http_Setup(sp->wrk->beresp, sp->wrk->ws); http_Setup(sp->wrk->beresp, sp->wrk->ws);
i = FetchHdr(sp); i = FetchHdr(sp);
...@@ -516,8 +513,8 @@ cnt_fetch(struct sess *sp) ...@@ -516,8 +513,8 @@ cnt_fetch(struct sess *sp)
AZ(sp->obj); AZ(sp->obj);
sp->wrk->do_close = 0; sp->wrk->do_close = 0;
sp->wrk->h_content_length = NULL; sp->wrk->h_content_length = NULL;
sp->wrk->bereq = NULL; http_Setup(sp->wrk->bereq, NULL);
sp->wrk->beresp = NULL; http_Setup(sp->wrk->beresp, NULL);
sp->err_code = 503; sp->err_code = 503;
sp->step = STP_ERROR; sp->step = STP_ERROR;
return (0); return (0);
...@@ -704,8 +701,8 @@ cnt_fetch(struct sess *sp) ...@@ -704,8 +701,8 @@ cnt_fetch(struct sess *sp)
sp->wrk->do_close = 0; sp->wrk->do_close = 0;
sp->wrk->h_content_length = NULL; sp->wrk->h_content_length = NULL;
sp->wrk->bereq = NULL; http_Setup(sp->wrk->bereq, NULL);
sp->wrk->beresp = NULL; http_Setup(sp->wrk->beresp, NULL);
sp->wrk->vfp = NULL; sp->wrk->vfp = NULL;
AZ(sp->wrk->wfd); AZ(sp->wrk->wfd);
AZ(sp->vbc); AZ(sp->vbc);
...@@ -812,7 +809,8 @@ cnt_hit(struct sess *sp) ...@@ -812,7 +809,8 @@ cnt_hit(struct sess *sp)
if (sp->handling == VCL_RET_DELIVER) { if (sp->handling == VCL_RET_DELIVER) {
/* Dispose of any body part of the request */ /* Dispose of any body part of the request */
(void)FetchReqBody(sp); (void)FetchReqBody(sp);
sp->wrk->bereq = NULL; AZ(sp->wrk->bereq->ws);
AZ(sp->wrk->beresp->ws);
sp->step = STP_DELIVER; sp->step = STP_DELIVER;
return (0); return (0);
} }
...@@ -953,7 +951,6 @@ cnt_miss(struct sess *sp) ...@@ -953,7 +951,6 @@ cnt_miss(struct sess *sp)
AZ(sp->obj); AZ(sp->obj);
AN(sp->objcore); AN(sp->objcore);
WS_Reset(sp->wrk->ws, NULL); WS_Reset(sp->wrk->ws, NULL);
sp->wrk->bereq = sp->wrk->http[0];
http_Setup(sp->wrk->bereq, sp->wrk->ws); http_Setup(sp->wrk->bereq, sp->wrk->ws);
http_FilterHeader(sp, HTTPH_R_FETCH); http_FilterHeader(sp, HTTPH_R_FETCH);
http_ForceGet(sp->wrk->bereq); http_ForceGet(sp->wrk->bereq);
...@@ -1035,7 +1032,6 @@ cnt_pass(struct sess *sp) ...@@ -1035,7 +1032,6 @@ cnt_pass(struct sess *sp)
AZ(sp->obj); AZ(sp->obj);
WS_Reset(sp->wrk->ws, NULL); WS_Reset(sp->wrk->ws, NULL);
sp->wrk->bereq = sp->wrk->http[0];
http_Setup(sp->wrk->bereq, sp->wrk->ws); http_Setup(sp->wrk->bereq, sp->wrk->ws);
http_FilterHeader(sp, HTTPH_R_PASS); http_FilterHeader(sp, HTTPH_R_PASS);
...@@ -1088,7 +1084,6 @@ cnt_pipe(struct sess *sp) ...@@ -1088,7 +1084,6 @@ cnt_pipe(struct sess *sp)
sp->acct_tmp.pipe++; sp->acct_tmp.pipe++;
WS_Reset(sp->wrk->ws, NULL); WS_Reset(sp->wrk->ws, NULL);
sp->wrk->bereq = sp->wrk->http[0];
http_Setup(sp->wrk->bereq, sp->wrk->ws); http_Setup(sp->wrk->bereq, sp->wrk->ws);
http_FilterHeader(sp, HTTPH_R_PIPE); http_FilterHeader(sp, HTTPH_R_PIPE);
...@@ -1100,7 +1095,7 @@ cnt_pipe(struct sess *sp) ...@@ -1100,7 +1095,7 @@ cnt_pipe(struct sess *sp)
PipeSession(sp); PipeSession(sp);
AZ(sp->wrk->wfd); AZ(sp->wrk->wfd);
sp->wrk->bereq = NULL; http_Setup(sp->wrk->bereq, NULL);
sp->step = STP_DONE; sp->step = STP_DONE;
return (0); return (0);
} }
......
...@@ -198,10 +198,12 @@ pan_wrk(const struct worker *wrk) ...@@ -198,10 +198,12 @@ pan_wrk(const struct worker *wrk)
vsb_printf(vsp, " worker = %p {\n", wrk); vsb_printf(vsp, " worker = %p {\n", wrk);
pan_ws(wrk->ws, 4); pan_ws(wrk->ws, 4);
if (wrk->bereq != NULL) if (wrk->bereq->ws != NULL)
pan_http("bereq", wrk->bereq, 4); pan_http("bereq", wrk->bereq, 4);
if (wrk->beresp != NULL) if (wrk->beresp->ws != NULL)
pan_http("beresp", wrk->beresp, 4); pan_http("beresp", wrk->beresp, 4);
if (wrk->resp->ws != NULL)
pan_http("resp", wrk->resp, 4);
vsb_printf(vsp, " },\n"); vsb_printf(vsp, " },\n");
} }
......
...@@ -140,9 +140,9 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace, ...@@ -140,9 +140,9 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace,
w->wlb = w->wlp = wlog; w->wlb = w->wlp = wlog;
w->wle = wlog + (sizeof wlog) / 4; w->wle = wlog + (sizeof wlog) / 4;
w->sha256ctx = &sha256; w->sha256ctx = &sha256;
w->http[0] = HTTP_create(http0, nhttp); w->bereq = HTTP_create(http0, nhttp);
w->http[1] = HTTP_create(http1, nhttp); w->beresp = HTTP_create(http1, nhttp);
w->http[2] = HTTP_create(http2, nhttp); w->resp = HTTP_create(http2, nhttp);
w->iov = iov; w->iov = iov;
w->siov = siov; w->siov = siov;
AZ(pthread_cond_init(&w->cond, NULL)); AZ(pthread_cond_init(&w->cond, NULL));
...@@ -155,6 +155,9 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace, ...@@ -155,6 +155,9 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace,
qp->nthr++; qp->nthr++;
stats_clean = 1; stats_clean = 1;
while (1) { while (1) {
CHECK_OBJ_NOTNULL(w->bereq, HTTP_MAGIC);
CHECK_OBJ_NOTNULL(w->beresp, HTTP_MAGIC);
CHECK_OBJ_NOTNULL(w->resp, HTTP_MAGIC);
CHECK_OBJ_NOTNULL(w, WORKER_MAGIC); CHECK_OBJ_NOTNULL(w, WORKER_MAGIC);
/* Process queued requests, if any */ /* Process queued requests, if any */
...@@ -178,15 +181,14 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace, ...@@ -178,15 +181,14 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace,
AN(w->wrq->func); AN(w->wrq->func);
w->lastused = NAN; w->lastused = NAN;
WS_Reset(w->ws, NULL); WS_Reset(w->ws, NULL);
w->bereq = NULL;
w->beresp = NULL;
w->resp = NULL;
w->storage_hint = NULL; w->storage_hint = NULL;
w->wrq->func(w, w->wrq->priv); w->wrq->func(w, w->wrq->priv);
AZ(w->bereq);
AZ(w->beresp);
AZ(w->resp);
WS_Assert(w->ws); WS_Assert(w->ws);
AZ(w->bereq->ws);
AZ(w->beresp->ws);
AZ(w->resp->ws);
AZ(w->wfd); AZ(w->wfd);
AZ(w->storage_hint); AZ(w->storage_hint);
assert(w->wlp == w->wlb); assert(w->wlp == w->wlb);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment