diff --git a/include/proto/sample.h b/include/proto/sample.h index bcdd23baa..268e7a0d2 100644 --- a/include/proto/sample.h +++ b/include/proto/sample.h @@ -63,4 +63,15 @@ int sample_convert(struct sample *sample, int req_type) return sample_casts[sample->data.type][req_type](sample); } +static inline +struct sample *smp_set_owner(struct sample *smp, struct proxy *px, + struct session *sess, struct stream *strm, int opt) +{ + smp->px = px; + smp->sess = sess; + smp->strm = strm; + smp->opt = opt; + return smp; +} + #endif /* _PROTO_SAMPLE_H */ diff --git a/src/hlua.c b/src/hlua.c index 9291517b1..2ed6f525d 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -3011,10 +3011,7 @@ __LJMP static int hlua_run_sample_fetch(lua_State *L) memset(&smp, 0, sizeof(smp)); /* Run the sample fetch process. */ - smp.px = hsmp->p; - smp.sess = hsmp->s->sess; - smp.strm = hsmp->s; - smp.opt = hsmp->dir & SMP_OPT_DIR; + smp_set_owner(&smp, hsmp->p, hsmp->s->sess, hsmp->s, hsmp->dir & SMP_OPT_DIR); if (!f->process(args, &smp, f->kw, f->private)) { if (hsmp->flags & HLUA_F_AS_STRING) lua_pushstring(L, ""); @@ -3121,6 +3118,8 @@ __LJMP static int hlua_run_sample_conv(lua_State *L) WILL_LJMP(lua_error(L)); } + smp_set_owner(&smp, hsmp->p, hsmp->s->sess, hsmp->s, hsmp->dir & SMP_OPT_DIR); + /* Apply expected cast. */ if (!sample_casts[smp.data.type][conv->in_type]) { hlua_pusherror(L, "invalid input argument: cannot cast '%s' to '%s'", @@ -3134,10 +3133,6 @@ __LJMP static int hlua_run_sample_conv(lua_State *L) } /* Run the sample conversion process. */ - smp.px = hsmp->p; - smp.sess = hsmp->s->sess; - smp.strm = hsmp->s; - smp.opt = hsmp->dir & SMP_OPT_DIR; if (!conv->process(args, &smp, conv->private)) { if (hsmp->flags & HLUA_F_AS_STRING) lua_pushstring(L, ""); diff --git a/src/sample.c b/src/sample.c index 5a79955bc..7c2d9058f 100644 --- a/src/sample.c +++ b/src/sample.c @@ -1040,10 +1040,7 @@ struct sample *sample_process(struct proxy *px, struct session *sess, memset(p, 0, sizeof(*p)); } - p->px = px; - p->sess = sess; - p->strm = strm; - p->opt = opt; + smp_set_owner(p, px, sess, strm, opt); if (!expr->fetch->process(expr->arg_p, p, expr->fetch->kw, expr->fetch->private)) return NULL;