]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
OPTION: map/hlua: make core.set_map() lookup more efficient
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 20 Nov 2024 15:07:44 +0000 (16:07 +0100)
committerAurelien DARRAGON <adarragon@haproxy.com>
Wed, 20 Nov 2024 15:14:13 +0000 (16:14 +0100)
0844bed7d3 ("MEDIUM: map/acl: Improve pat_ref_set() efficiency (for
"set-map", "add-acl" action perfs)") improved lookup efficiency for
set-map http action, but the core.set_map() lua method which is built
on the same construct was overlooked. Let's also benefit from this optim
as it easily applies.

src/hlua.c

index cd2b908d732031df293173cc7bf55d479a0158a8..10f702798bba2e2e91186dc545edcc1dc743a6fe 100644 (file)
@@ -2279,6 +2279,7 @@ static int hlua_set_map(lua_State *L)
        const char *key;
        const char *value;
        struct pat_ref *ref;
+       struct pat_ref_elt *elt;
 
        MAY_LJMP(check_args(L, 3, "set_map"));
 
@@ -2291,8 +2292,9 @@ static int hlua_set_map(lua_State *L)
                WILL_LJMP(luaL_error(L, "'set_map': unknown map file '%s'", name));
 
        HA_RWLOCK_WRLOCK(PATREF_LOCK, &ref->lock);
-       if (pat_ref_find_elt(ref, key) != NULL)
-               pat_ref_set(ref, key, value, NULL, NULL);
+       elt = pat_ref_find_elt(ref, key);
+       if (elt)
+               pat_ref_set(ref, key, value, NULL, elt);
        else
                pat_ref_add(ref, key, value, NULL);
        HA_RWLOCK_WRUNLOCK(PATREF_LOCK, &ref->lock);