]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: lua: remove hlua_sample_fetch
authorWilly Tarreau <w@1wt.eu>
Tue, 10 Mar 2015 13:27:20 +0000 (14:27 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 11 Mar 2015 19:41:47 +0000 (20:41 +0100)
This struct used to carry only a sample fetch function. Thanks to
lua_pushuserdata(), we don't need to have the Lua engine allocate
that struct for us and we can simply push our pointer onto the stack.
This makes the code more readable by removing several occurrences of
"f->f->". Just like the previous patch, it comes with the nice effect
of saving about 1.3% of performance when fetching samples from Lua.

include/types/hlua.h
src/hlua.c

index ceb01db67de7a6c4fd81746dd100458e1c27cfe4..b59a3b7a39fd33feca7aa0659c44fe2a8aba80a0 100644 (file)
@@ -103,16 +103,6 @@ struct hlua_smp {
        int stringsafe;
 };
 
-/* This struct is used as a closure argument associated
- * with dynamic sample-fetch created fucntions. This contains
- * a pointer to the original sample_fetch struct. It is used
- * to identify the function to execute with the sample fetch
- * wrapper.
- */
-struct hlua_sample_fetch {
-       struct sample_fetch *f;
-};
-
 /* This struct contains data used with sleep functions. */
 struct hlua_sleep {
        struct task *task; /* task associated with sleep. */
index 3f81646da07006cd17e1e4ae21da99e5356de994..86fe28283a0a60e808fad25874eb724c26e2052b 100644 (file)
@@ -2539,13 +2539,13 @@ static int hlua_fetches_new(lua_State *L, struct hlua_txn *txn, int stringsafe)
 __LJMP static int hlua_run_sample_fetch(lua_State *L)
 {
        struct hlua_smp *s;
-       struct hlua_sample_fetch *f;
+       struct sample_fetch *f;
        struct arg args[ARGM_NBARGS + 1];
        int i;
        struct sample smp;
 
        /* Get closure arguments. */
-       f = (struct hlua_sample_fetch *)lua_touserdata(L, lua_upvalueindex(1));
+       f = (struct sample_fetch *)lua_touserdata(L, lua_upvalueindex(1));
 
        /* Get traditionnal arguments. */
        s = MAY_LJMP(hlua_checkfetches(L, 1));
@@ -2559,10 +2559,10 @@ __LJMP static int hlua_run_sample_fetch(lua_State *L)
        args[i].type = ARGT_STOP;
 
        /* Check arguments. */
-       MAY_LJMP(hlua_lua2arg_check(L, 1, args, f->f->arg_mask));
+       MAY_LJMP(hlua_lua2arg_check(L, 1, args, f->arg_mask));
 
        /* Run the special args checker. */
-       if (f->f->val_args && !f->f->val_args(args, NULL)) {
+       if (f->val_args && !f->val_args(args, NULL)) {
                lua_pushfstring(L, "error in arguments");
                WILL_LJMP(lua_error(L));
        }
@@ -2571,7 +2571,7 @@ __LJMP static int hlua_run_sample_fetch(lua_State *L)
        memset(&smp, 0, sizeof(smp));
 
        /* Run the sample fetch process. */
-       if (!f->f->process(s->p, s->s, s->l7, 0, args, &smp, f->f->kw, f->f->private)) {
+       if (!f->process(s->p, s->s, s->l7, 0, args, &smp, f->kw, f->private)) {
                if (s->stringsafe)
                        lua_pushstring(L, "");
                else
@@ -3858,7 +3858,6 @@ void hlua_init(void)
        int i;
        int idx;
        struct sample_fetch *sf;
-       struct hlua_sample_fetch *hsf;
        struct sample_conv *sc;
        char *p;
 #ifdef USE_OPENSSL
@@ -3994,8 +3993,7 @@ void hlua_init(void)
 
                /* Register the function. */
                lua_pushstring(gL.T, trash.str);
-               hsf = lua_newuserdata(gL.T, sizeof(struct hlua_sample_fetch));
-               hsf->f = sf;
+               lua_pushlightuserdata(gL.T, sf);
                lua_pushcclosure(gL.T, hlua_run_sample_fetch, 1);
                lua_settable(gL.T, -3);
        }