diff --git a/reg-tests/lua/h00001.lua b/reg-tests/lua/h00001.lua new file mode 100644 index 000000000..999ea8871 --- /dev/null +++ b/reg-tests/lua/h00001.lua @@ -0,0 +1,15 @@ +core.register_action("bug", { "http-res" }, function(txn) + data = txn:get_priv() + if not data then + data = 0 + end + data = data + 1 + print(string.format("set to %d", data)) + txn.http:res_set_status(200 + data) + txn:set_priv(data) +end) + +core.register_service("fakeserv", "http", function(applet) + applet:set_status(200) + applet:start_response() +end) diff --git a/reg-tests/lua/h00001.vtc b/reg-tests/lua/h00001.vtc new file mode 100644 index 000000000..6d38ecab3 --- /dev/null +++ b/reg-tests/lua/h00001.vtc @@ -0,0 +1,31 @@ +varnishtest "Lua: txn:get_priv() scope" +feature ignore_unknown_macro + +haproxy h1 -conf { + global + lua-load ${testdir}/h00001.lua + + frontend fe1 + mode http + bind "fd@${fe1}" + default_backend b1 + + http-response lua.bug + + backend b1 + mode http + http-request use-service lua.fakeserv +} -start + +client c0 -connect ${h1_fe1_sock} { + txreq -url "/" + rxresp + expect resp.status == 201 + txreq -url "/" + rxresp + expect resp.status == 201 +} + +client c0 -start + +client c0 -wait diff --git a/src/proto_http.c b/src/proto_http.c index a7a8dadd6..29b1b68d1 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -62,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -4460,6 +4461,9 @@ void http_end_txn_clean_session(struct stream *s) s->flags &= ~(SF_CURR_SESS|SF_REDIRECTABLE|SF_SRV_REUSED); s->flags &= ~(SF_ERR_MASK|SF_FINST_MASK|SF_REDISP); + hlua_ctx_destroy(s->hlua); + s->hlua = NULL; + s->txn->meth = 0; http_reset_txn(s); s->txn->flags |= TX_NOT_FIRST | TX_WAIT_NEXT_RQ;