]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: hlua_fcn: enforce yield after *_get_stats() methods
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 30 Apr 2025 14:41:16 +0000 (16:41 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Wed, 30 Apr 2025 15:00:31 +0000 (17:00 +0200)
{listener,proxy,server}_get_stats() methods are know to be expensive,
expecially if used under an iteration. Indeed, while automatic yield
is performed every X lua instructions (defaults to 10k), computing an
object's stats 10K times in a single cpu loop is not desirable and
could create contention.

In this patch we leverage hlua_yield_asap() at the end of *_get_stats()
methods in order to force the automatic yield to occur ASAP after the
method returns. Hopefully this should help in similar scenarios as the
one described in GH #2903

src/hlua_fcn.c

index 0ad0b7ed0c94ed8765731b94b728bc1996f52326..a340d0d8849aabfb3c5bb1b5f74c980e38db682e 100644 (file)
@@ -1154,6 +1154,7 @@ int hlua_listener_get_stats(lua_State *L)
                hlua_fcn_pushfield(L, &stats[i]);
                lua_settable(L, -3);
        }
+       hlua_yield_asap(L);
        return 1;
 
 }
@@ -1200,6 +1201,7 @@ int hlua_server_get_stats(lua_State *L)
                hlua_fcn_pushfield(L, &stats[i]);
                lua_settable(L, -3);
        }
+       hlua_yield_asap(L);
        return 1;
 
 }
@@ -2053,6 +2055,7 @@ int hlua_proxy_get_stats(lua_State *L)
                hlua_fcn_pushfield(L, &stats[i]);
                lua_settable(L, -3);
        }
+       hlua_yield_asap(L);
        return 1;
 }