diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2023-05-21 11:57:09 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2023-05-21 11:57:09 +0100 |
commit | bb8ac92aff2b60376dcd97977b1780e592b89d0b (patch) | |
tree | 72ec4f6da28a64b44ee1c6c3aa23a59159f65aa6 | |
parent | 6c1c17e10bac24749a6b6490e59e061ebac42a7a (diff) | |
download | rspamd-bb8ac92aff2b60376dcd97977b1780e592b89d0b.tar.gz rspamd-bb8ac92aff2b60376dcd97977b1780e592b89d0b.zip |
[Minor] Avoid using registry to store traverse function + cleanup
-rw-r--r-- | src/lua/lua_map.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c index 36b4ef4e5..fe01c3031 100644 --- a/src/lua/lua_map.c +++ b/src/lua/lua_map.c @@ -1085,7 +1085,7 @@ lua_map_foreach_cb (gconstpointer key, gconstpointer value, gsize _hits, gpointe struct lua_map_traverse_cbdata *cbdata = ud; lua_State *L = cbdata->L; - lua_rawgeti (L, LUA_REGISTRYINDEX, cbdata->cbref); + lua_pushvalue (L, cbdata->cbref); if (cbdata->use_text) { lua_new_text(L, key, strlen (key), 0); @@ -1098,18 +1098,18 @@ lua_map_foreach_cb (gconstpointer key, gconstpointer value, gsize _hits, gpointe if (lua_pcall(L, 2, 1, 0) != 0) { msg_err("call to map foreach callback failed: %s", lua_tostring(L, -1)); - lua_pop(L, 1); + lua_pop(L, 2); /* error + function */ return FALSE; } else { if (lua_isboolean (L, -1)) { - lua_pop (L, 1); + lua_pop (L, 2); return lua_toboolean (L, -1); } - lua_pop (L, 1); /* Result */ + lua_pop (L, 2); /* result + function */ } return TRUE; @@ -1130,11 +1130,14 @@ lua_map_foreach (lua_State * L) struct lua_map_traverse_cbdata cbdata; cbdata.L = L; lua_pushvalue (L, 2); /* func */ - cbdata.cbref = luaL_ref(L, LUA_REGISTRYINDEX); + cbdata.cbref = lua_gettop (L); if (map->map->traverse_function) { rspamd_map_traverse (map->map, lua_map_foreach_cb, &cbdata, FALSE); } + + /* Remove callback */ + lua_pop (L, 1); } else { return luaL_error (L, "invalid arguments"); |