[master] 8f2d2e7 Make FetchBody() pool-task compatible.
Poul-Henning Kamp
phk at varnish-cache.org
Mon Mar 5 15:38:38 CET 2012
commit 8f2d2e7bce9bf5a614a42a296b0b49d67ec4be25
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Mar 5 14:37:54 2012 +0000
Make FetchBody() pool-task compatible.
Add #ifdef 0'ed code to put another thread on body-fetching
Hugely inpired by patches from: martin
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 63ea682..2bae6b4 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -479,6 +479,8 @@ struct busyobj {
struct http_conn htc;
enum body_status body_status;
+ struct pool_task task;
+
struct vef_priv *vef_priv;
unsigned should_close;
@@ -755,7 +757,7 @@ struct storage *FetchStorage(struct busyobj *, ssize_t sz);
int FetchError(struct busyobj *, const char *error);
int FetchError2(struct busyobj *, const char *error, const char *more);
int FetchHdr(struct sess *sp, int need_host_hdr, int sendbody);
-void FetchBody(struct worker *w, struct busyobj *bo);
+void FetchBody(struct worker *w, void *bo);
int FetchReqBody(const struct sess *sp, int sendbody);
void Fetch_Init(void);
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index d13fc46..ecea4b5 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -903,8 +903,19 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req)
bo = req->busyobj;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
+#if 1
FetchBody(wrk, bo);
- bo->fetch_obj = NULL;
+#else
+ bo->task.func = FetchBody;
+ bo->task.priv = bo;
+ if (Pool_Task(wrk->pool, &bo->task, POOL_NO_QUEUE)) {
+ FetchBody(wrk, bo);
+ } else {
+ while (bo->state < BOS_FAILED)
+ (void)usleep(10000);
+ }
+#endif
+ assert(bo->state >= BOS_FAILED);
http_Teardown(bo->bereq);
http_Teardown(bo->beresp);
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 4fc0f8e..88bca02 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -530,7 +530,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
/*--------------------------------------------------------------------*/
void
-FetchBody(struct worker *wrk, struct busyobj *bo)
+FetchBody(struct worker *wrk, void *priv)
{
int cls;
struct storage *st;
@@ -538,9 +538,10 @@ FetchBody(struct worker *wrk, struct busyobj *bo)
ssize_t cl;
struct http_conn *htc;
struct object *obj;
+ struct busyobj *bo;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
- CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
+ CAST_OBJ_NOTNULL(bo, priv, BUSYOBJ_MAGIC);
CHECK_OBJ_NOTNULL(bo->vbc, VBC_MAGIC);
obj = bo->fetch_obj;
CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
More information about the varnish-commit
mailing list