[master] fc59c74 Give each pool a list of sockets to accept() from
Poul-Henning Kamp
phk at varnish-cache.org
Sat Sep 17 18:57:37 CEST 2011
commit fc59c7455129e230fbead7627d522f6a7e8c07d1
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Sat Sep 17 16:57:20 2011 +0000
Give each pool a list of sockets to accept() from
diff --git a/bin/varnishd/cache_pool.c b/bin/varnishd/cache_pool.c
index 6fc7737..05ce529 100644
--- a/bin/varnishd/cache_pool.c
+++ b/bin/varnishd/cache_pool.c
@@ -62,6 +62,13 @@ static void *waiter_priv;
VTAILQ_HEAD(workerhead, worker);
+struct poolsock {
+ unsigned magic;
+#define POOLSOCK_MAGIC 0x1b0a2d38
+ VTAILQ_ENTRY(poolsock) list;
+ int sock;
+};
+
/* Number of work requests queued in excess of worker threads available */
struct pool {
@@ -70,6 +77,7 @@ struct pool {
struct lock mtx;
struct workerhead idle;
VTAILQ_HEAD(, sess) queue;
+ VTAILQ_HEAD(, poolsock) socks;
unsigned nthr;
unsigned lqueue;
unsigned last_lqueue;
@@ -237,6 +245,29 @@ Pool_QueueSession(struct sess *sp)
* Add (more) thread pools
*/
+static struct pool *
+pool_mkpool(void)
+{
+ struct pool *pp;
+ struct listen_sock *ls;
+ struct poolsock *ps;
+
+ ALLOC_OBJ(pp, POOL_MAGIC);
+ XXXAN(pp);
+ Lck_New(&pp->mtx, lck_wq);
+ VTAILQ_INIT(&pp->queue);
+ VTAILQ_INIT(&pp->idle);
+ VTAILQ_INIT(&pp->socks);
+
+ VTAILQ_FOREACH(ls, &heritage.socks, list) {
+ ALLOC_OBJ(ps, POOLSOCK_MAGIC);
+ XXXAN(ps);
+ ps->sock = ls->sock;
+ VTAILQ_INSERT_TAIL(&pp->socks, ps, list);
+ }
+ return (pp);
+}
+
static void
wrk_addpools(const unsigned pools)
{
@@ -251,12 +282,8 @@ wrk_addpools(const unsigned pools)
owq = wq;
wq = pwq;
for (u = nwq; u < pools; u++) {
- wq[u] = calloc(sizeof *wq[0], 1);
+ wq[u] = pool_mkpool();
XXXAN(wq[u]);
- wq[u]->magic = POOL_MAGIC;
- Lck_New(&wq[u]->mtx, lck_wq);
- VTAILQ_INIT(&wq[u]->queue);
- VTAILQ_INIT(&wq[u]->idle);
}
(void)owq; /* XXX: avoid race, leak it. */
nwq = pools;
More information about the varnish-commit
mailing list