Skip to content

Commit

Permalink
[Minor] Avoid using registry to store traverse function + cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed May 21, 2023
1 parent 6c1c17e commit bb8ac92
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions src/lua/lua_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
Expand All @@ -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");
Expand Down

0 comments on commit bb8ac92

Please sign in to comment.