[master] a67a9d560 Turn pool_task fields into single-element arrays
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Fri Apr 3 12:42:06 UTC 2020
commit a67a9d5606210245dd0c51966698dcd07206c91e
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Fri Apr 3 12:30:11 2020 +0200
Turn pool_task fields into single-element arrays
That is, when the struct is embedded in another struct. This is a
mechanical change allowing to always treat tasks like pointers.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index e661804e7..9cb57970c 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -247,7 +247,7 @@ struct worker {
struct VSC_main_wrk *stats;
struct vsl_log *vsl; // borrowed from req/bo
- struct pool_task task;
+ struct pool_task task[1];
vtim_real lastused;
int strangelove;
@@ -409,7 +409,7 @@ struct busyobj {
struct http_conn *htc;
- struct pool_task fetch_task;
+ struct pool_task fetch_task[1];
#define BO_FLAG(l, r, w, d) unsigned l:1;
#include "tbl/bo_flags.h"
@@ -471,7 +471,7 @@ struct req {
struct sess *sp;
struct worker *wrk;
- struct pool_task task;
+ struct pool_task task[1];
const struct transport *transport;
void *transport_priv;
diff --git a/bin/varnishd/cache/cache_acceptor.c b/bin/varnishd/cache/cache_acceptor.c
index b40987e00..d43144dfc 100644
--- a/bin/varnishd/cache/cache_acceptor.c
+++ b/bin/varnishd/cache/cache_acceptor.c
@@ -73,7 +73,7 @@ struct poolsock {
#define POOLSOCK_MAGIC 0x1b0a2d38
VTAILQ_ENTRY(poolsock) list;
struct listen_sock *lsock;
- struct pool_task task;
+ struct pool_task task[1];
struct pool *pool;
};
@@ -525,7 +525,7 @@ vca_accept_task(struct worker *wrk, void *arg)
* taken up by another thread again.
*/
if (!ps->pool->die) {
- AZ(Pool_Task(wrk->pool, &ps->task,
+ AZ(Pool_Task(wrk->pool, ps->task,
TASK_QUEUE_VCA));
return;
}
@@ -554,11 +554,11 @@ VCA_NewPool(struct pool *pp)
ALLOC_OBJ(ps, POOLSOCK_MAGIC);
AN(ps);
ps->lsock = ls;
- ps->task.func = vca_accept_task;
- ps->task.priv = ps;
+ ps->task->func = vca_accept_task;
+ ps->task->priv = ps;
ps->pool = pp;
VTAILQ_INSERT_TAIL(&pp->poolsocks, ps, list);
- AZ(Pool_Task(pp, &ps->task, TASK_QUEUE_VCA));
+ AZ(Pool_Task(pp, ps->task, TASK_QUEUE_VCA));
}
}
diff --git a/bin/varnishd/cache/cache_backend_probe.c b/bin/varnishd/cache/cache_backend_probe.c
index 39bc68196..4db99c2c1 100644
--- a/bin/varnishd/cache/cache_backend_probe.c
+++ b/bin/varnishd/cache/cache_backend_probe.c
@@ -84,7 +84,7 @@ struct vbp_target {
vtim_real due;
int running;
int heap_idx;
- struct pool_task task;
+ struct pool_task task[1];
};
static struct lock vbp_mtx;
@@ -485,10 +485,10 @@ vbp_thread(struct worker *wrk, void *priv)
vt->due = now + vt->interval;
if (!vt->running) {
vt->running = 1;
- vt->task.func = vbp_task;
- vt->task.priv = vt;
+ vt->task->func = vbp_task;
+ vt->task->priv = vt;
Lck_Unlock(&vbp_mtx);
- r = Pool_Task_Any(&vt->task, TASK_QUEUE_REQ);
+ r = Pool_Task_Any(vt->task, TASK_QUEUE_REQ);
Lck_Lock(&vbp_mtx);
if (r)
vt->running = 0;
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 5319d6a76..f911f7ca7 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -1064,10 +1064,10 @@ VBF_Fetch(struct worker *wrk, struct req *req, struct objcore *oc,
AZ(bo->req);
bo->req = req;
- bo->fetch_task.priv = bo;
- bo->fetch_task.func = vbf_fetch_thread;
+ bo->fetch_task->priv = bo;
+ bo->fetch_task->func = vbf_fetch_thread;
- if (Pool_Task(wrk->pool, &bo->fetch_task, TASK_QUEUE_BO)) {
+ if (Pool_Task(wrk->pool, bo->fetch_task, TASK_QUEUE_BO)) {
wrk->stats->fetch_no_thread++;
(void)vbf_stp_fail(req->wrk, bo);
if (bo->stale_oc != NULL)
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 51d2f972f..831572956 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -634,7 +634,7 @@ hsh_rush2(struct worker *wrk, struct rush *r)
* may be vmod_privs to cleanup and we need a proper
* workerthread for that.
*/
- AZ(Pool_Task(req->sp->pool, &req->task, TASK_QUEUE_RUSH));
+ AZ(Pool_Task(req->sp->pool, req->task, TASK_QUEUE_RUSH));
}
}
}
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index 8a417fb14..2dd248558 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -73,8 +73,8 @@ SES_SetTransport(struct worker *wrk, struct sess *sp, struct req *req,
sp->sattr[SA_TRANSPORT] = xp->number;
req->transport = xp;
- wrk->task.func = xp->new_session;
- wrk->task.priv = req;
+ wrk->task->func = xp->new_session;
+ wrk->task->priv = req;
}
/*--------------------------------------------------------------------*/
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index 1d34efe54..54e962cd7 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -209,7 +209,7 @@ pool_getidleworker(struct pool *pp, enum task_prio prio)
CAST_OBJ_NOTNULL(wrk, pt->priv, WORKER_MAGIC);
AN(pp->nidle);
- VTAILQ_REMOVE(&pp->idle_queue, &wrk->task, list);
+ VTAILQ_REMOVE(&pp->idle_queue, wrk->task, list);
pp->nidle--;
return (wrk);
@@ -244,11 +244,11 @@ Pool_Task_Arg(struct worker *wrk, enum task_prio prio, task_func_t *func,
wrk2 = wrk;
retval = 0;
}
- AZ(wrk2->task.func);
+ AZ(wrk2->task->func);
assert(arg_len <= WS_ReserveSize(wrk2->aws, arg_len));
memcpy(wrk2->aws->f, arg, arg_len);
- wrk2->task.func = func;
- wrk2->task.priv = wrk2->aws->f;
+ wrk2->task->func = func;
+ wrk2->task->priv = wrk2->aws->f;
Lck_Unlock(&pp->mtx);
// see signaling_note at the top for explanation
if (retval)
@@ -287,9 +287,9 @@ Pool_Task(struct pool *pp, struct pool_task *task, enum task_prio prio)
wrk = pool_getidleworker(pp, prio);
if (wrk != NULL) {
- AZ(wrk->task.func);
- wrk->task.func = task->func;
- wrk->task.priv = task->priv;
+ AZ(wrk->task->func);
+ wrk->task->func = task->func;
+ wrk->task->priv = task->priv;
Lck_Unlock(&pp->mtx);
// see signaling_note at the top for explanation
AZ(pthread_cond_signal(&wrk->cond));
@@ -383,9 +383,9 @@ Pool_Work_Thread(struct pool *pp, struct worker *wrk)
/* Nothing to do: To sleep, perchance to dream ... */
if (isnan(wrk->lastused))
wrk->lastused = VTIM_real();
- wrk->task.func = NULL;
- wrk->task.priv = wrk;
- VTAILQ_INSERT_HEAD(&pp->idle_queue, &wrk->task, list);
+ wrk->task->func = NULL;
+ wrk->task->priv = wrk;
+ VTAILQ_INSERT_HEAD(&pp->idle_queue, wrk->task, list);
pp->nidle++;
do {
// see signaling_note at the top for explanation
@@ -398,8 +398,8 @@ Pool_Work_Thread(struct pool *pp, struct worker *wrk)
i = Lck_CondWait(&wrk->cond, &pp->mtx, tmo);
if (i == ETIMEDOUT)
VCL_Rel(&wrk->vcl);
- } while (wrk->task.func == NULL);
- tpx = wrk->task;
+ } while (wrk->task->func == NULL);
+ tpx = *wrk->task;
tp = &tpx;
wrk->stats->summs++;
}
@@ -414,7 +414,7 @@ Pool_Work_Thread(struct pool *pp, struct worker *wrk)
tp->func(wrk, tp->priv);
if (DO_DEBUG(DBG_VCLREL) && wrk->vcl != NULL)
VCL_Rel(&wrk->vcl);
- tpx = wrk->task;
+ tpx = *wrk->task;
tp = &tpx;
} while (tp->func != NULL);
@@ -586,9 +586,9 @@ pool_herder(void *priv)
pp->nthr > cache_param->wthread_max) {
/* Give it a kiss on the cheek... */
VTAILQ_REMOVE(&pp->idle_queue,
- &wrk->task, list);
+ wrk->task, list);
pp->nidle--;
- wrk->task.func = pool_kiss_of_death;
+ wrk->task->func = pool_kiss_of_death;
AZ(pthread_cond_signal(&wrk->cond));
} else {
delay = wrk->lastused - t_idle;
diff --git a/bin/varnishd/http1/cache_http1_fsm.c b/bin/varnishd/http1/cache_http1_fsm.c
index 67ab7016b..ff4aaa72b 100644
--- a/bin/varnishd/http1/cache_http1_fsm.c
+++ b/bin/varnishd/http1/cache_http1_fsm.c
@@ -124,8 +124,8 @@ http1_new_session(struct worker *wrk, void *arg)
return;
}
http1_setstate(sp, H1NEWREQ);
- wrk->task.func = http1_req;
- wrk->task.priv = req;
+ wrk->task->func = http1_req;
+ wrk->task->priv = req;
}
static void v_matchproto_(task_func_t)
@@ -142,8 +142,8 @@ http1_unwait(struct worker *wrk, void *arg)
req->htc->rfd = &sp->fd;
HTC_RxInit(req->htc, req->ws);
http1_setstate(sp, H1NEWREQ);
- wrk->task.func = http1_req;
- wrk->task.priv = req;
+ wrk->task->func = http1_req;
+ wrk->task->priv = req;
}
static void v_matchproto_(vtr_req_body_t)
@@ -392,8 +392,8 @@ HTTP1_Session(struct worker *wrk, struct req *req)
req->req_step = R_STP_TRANSPORT;
http1_setstate(sp, H1PROC);
} else if (st == H1PROC) {
- req->task.func = http1_req;
- req->task.priv = req;
+ req->task->func = http1_req;
+ req->task->priv = req;
wrk->stats->client_req++;
CNT_Embark(wrk, req);
if (req->req_step == R_STP_TRANSPORT) {
@@ -403,8 +403,8 @@ HTTP1_Session(struct worker *wrk, struct req *req)
if (CNT_Request(req) == REQ_FSM_DISEMBARK)
return;
AZ(req->top->vcl0);
- req->task.func = NULL;
- req->task.priv = NULL;
+ req->task->func = NULL;
+ req->task->priv = NULL;
AZ(req->ws->r);
AZ(wrk->aws->r);
http1_setstate(sp, H1CLEANUP);
diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c
index 317b3287b..704b5cc94 100644
--- a/bin/varnishd/http2/cache_http2_proto.c
+++ b/bin/varnishd/http2/cache_http2_proto.c
@@ -598,10 +598,10 @@ h2_end_headers(struct worker *wrk, struct h2_sess *h2,
AN(req->http->hd[HTTP_HDR_PROTO].b);
req->req_step = R_STP_TRANSPORT;
- req->task.func = h2_do_req;
- req->task.priv = req;
+ req->task->func = h2_do_req;
+ req->task->priv = req;
r2->scheduled = 1;
- if (Pool_Task(wrk->pool, &req->task, TASK_QUEUE_STR) != 0) {
+ if (Pool_Task(wrk->pool, req->task, TASK_QUEUE_STR) != 0) {
r2->scheduled = 0;
r2->state = H2_S_CLOSED;
return (H2SE_REFUSED_STREAM); //rfc7540,l,3326,3329
diff --git a/bin/varnishd/http2/cache_http2_session.c b/bin/varnishd/http2/cache_http2_session.c
index 543eea868..571a42843 100644
--- a/bin/varnishd/http2/cache_http2_session.c
+++ b/bin/varnishd/http2/cache_http2_session.c
@@ -278,8 +278,8 @@ h2_ou_session(struct worker *wrk, struct h2_sess *h2,
r2 = h2_new_req(wrk, h2, 1, req);
req->transport = &H2_transport;
req->req_step = R_STP_TRANSPORT;
- req->task.func = h2_do_req;
- req->task.priv = req;
+ req->task->func = h2_do_req;
+ req->task->priv = req;
r2->scheduled = 1;
r2->state = H2_S_CLOS_REM; // rfc7540,l,489,491
req->err_code = 0;
@@ -295,7 +295,7 @@ h2_ou_session(struct worker *wrk, struct h2_sess *h2,
h2_del_req(wrk, r2);
return (0);
}
- if (Pool_Task(wrk->pool, &req->task, TASK_QUEUE_REQ)) {
+ if (Pool_Task(wrk->pool, req->task, TASK_QUEUE_REQ)) {
r2->scheduled = 0;
h2_del_req(wrk, r2);
VSLb(h2->vsl, SLT_Debug, "H2: No Worker-threads");
More information about the varnish-commit
mailing list