[master] 427e00c Eliminate the list of struct waited, a simple count will do.
Poul-Henning Kamp
phk at FreeBSD.org
Thu May 28 00:04:17 CEST 2015
commit 427e00c9c6612d74b78076e564cee9488f7b1606
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed May 27 22:03:57 2015 +0000
Eliminate the list of struct waited, a simple count will do.
diff --git a/bin/varnishd/waiter/cache_waiter_kqueue.c b/bin/varnishd/waiter/cache_waiter_kqueue.c
index 90ba41d..baeed5c 100644
--- a/bin/varnishd/waiter/cache_waiter_kqueue.c
+++ b/bin/varnishd/waiter/cache_waiter_kqueue.c
@@ -54,10 +54,9 @@ struct vwk {
pthread_t thread;
double next;
int pipe[2];
-
- VTAILQ_HEAD(,waited) list;
- struct lock mtx;
+ unsigned nwaited;
int die;
+ struct lock mtx;
};
/*--------------------------------------------------------------------*/
@@ -116,13 +115,13 @@ vwk_thread(void *priv)
continue;
}
CAST_OBJ_NOTNULL(wp, ke[j].udata, WAITED_MAGIC);
- VTAILQ_REMOVE(&vwk->list, wp, list);
+ vwk->nwaited--;
if (kp->flags & EV_EOF)
Wait_Call(w, wp, WAITER_REMCLOSE, now);
else
Wait_Call(w, wp, WAITER_ACTION, now);
}
- if (VTAILQ_EMPTY(&vwk->list) && vwk->die)
+ if (vwk->nwaited == 0 && vwk->die)
break;
}
Lck_Unlock(&vwk->mtx);
@@ -143,7 +142,7 @@ vwk_enter(void *priv, struct waited *wp)
CAST_OBJ_NOTNULL(vwk, priv, VWK_MAGIC);
EV_SET(&ke, wp->fd, EVFILT_READ, EV_ADD|EV_ONESHOT, 0, 0, wp);
Lck_Lock(&vwk->mtx);
- VTAILQ_INSERT_TAIL(&vwk->list, wp, list);
+ vwk->nwaited++;
Wait_HeapInsert(vwk->waiter, wp);
AZ(kevent(vwk->kq, &ke, 1, NULL, 0, NULL));
@@ -170,7 +169,6 @@ vwk_init(struct waiter *w)
vwk->kq = kqueue();
assert(vwk->kq >= 0);
- VTAILQ_INIT(&vwk->list);
Lck_New(&vwk->mtx, lck_misc);
AZ(pipe(vwk->pipe));
EV_SET(&ke, vwk->pipe[0], EVFILT_READ, EV_ADD, 0, 0, vwk);
diff --git a/bin/varnishd/waiter/waiter.h b/bin/varnishd/waiter/waiter.h
index 3d301ea..488c8e3 100644
--- a/bin/varnishd/waiter/waiter.h
+++ b/bin/varnishd/waiter/waiter.h
@@ -69,7 +69,6 @@ struct waited {
void *ptr;
const struct waitfor *waitfor;
double idle;
- VTAILQ_ENTRY(waited) list;
};
/* cache_waiter.c */
More information about the varnish-commit
mailing list