Commit 4067f504 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Don't put objcores on the ban list until they go non-BUSY.

Fixes	#1419
parent 08e2b3a8
......@@ -1030,6 +1030,7 @@ ban_lurker_getfirst(struct vsl_log *vsl, struct ban *bt)
* We got the lock, and the oc is not being
* dismantled under our feet, run with it...
*/
AZ(oc->flags & OC_F_BUSY);
oc->refcnt += 1;
VTAILQ_REMOVE(&bt->objcore, oc, ban_list);
VTAILQ_INSERT_TAIL(&bt->objcore, oc, ban_list);
......
......@@ -667,10 +667,6 @@ HSH_Unbusy(struct dstat *ds, struct objcore *oc)
CHECK_OBJ(oh, OBJHEAD_MAGIC);
AN(oc->flags & OC_F_BUSY);
if (oc->flags & OC_F_PRIVATE)
AZ(oc->ban);
else
AN(oc->ban);
assert(oh->refcnt > 0);
/* XXX: pretouch neighbors on oh->objcs to prevent page-on under mtx */
......@@ -683,6 +679,8 @@ HSH_Unbusy(struct dstat *ds, struct objcore *oc)
if (oh->waitinglist != NULL)
hsh_rush(ds, oh);
Lck_Unlock(&oh->mtx);
if (!(oc->flags & OC_F_PRIVATE))
BAN_NewObjCore(oc);
}
/*---------------------------------------------------------------------
......
......@@ -291,8 +291,6 @@ STV_MkObject(struct stevedore *stv, struct busyobj *bo,
bo->stats->n_object++;
o->objcore = bo->fetch_objcore;
if (!(o->objcore->flags & OC_F_PRIVATE))
BAN_NewObjCore(o->objcore);
o->objcore->methods = &default_oc_methods;
o->objcore->priv = o;
......
varnishtest "Make sure banlurker skips busy objects"
server s1 {
rxreq
send "HTTP/1.0 200 Ok\r\n"
sema r1 sync 2
send "Foobar: blaf\r\n"
send "Content-Length: 10\r\n"
send "\r\n\r\n"
send "abcde"
sema r2 sync 2
send "abcdefghij"
} -start
varnish v1 -vcl+backend {
sub vcl_backend_response {
set beresp.do_stream = false;
}
} -start
varnish v1 -cliok {param.set debug +lurker}
varnish v1 -cliok {param.set ban_lurker_age 1}
varnish v1 -cliok {ban.list}
client c1 {
txreq
rxresp
expect resp.status == 200
expect resp.http.foobar == blaf
} -start
sema r1 sync 2
varnish v1 -cliok {ban.list}
varnish v1 -cliok {ban obj.http.goo == bar}
varnish v1 -cliok {ban.list}
delay 2
varnish v1 -cliok {ban.list}
sema r2 sync 2
client c1 -wait
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