aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/lua_map.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-05-20 20:51:28 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-05-20 20:51:28 +0100
commitfd5a976a094df481896172e6b3e1780958f2beaa (patch)
treeb08c0eb9ec5a9360fb56ca4d0326406076e085f8 /src/lua/lua_map.c
parent48036e40210693fbe552016bfe0deb35796438af (diff)
downloadrspamd-fd5a976a094df481896172e6b3e1780958f2beaa.tar.gz
rspamd-fd5a976a094df481896172e6b3e1780958f2beaa.zip
[Minor] Improve functions pcall invocations
Diffstat (limited to 'src/lua/lua_map.c')
-rw-r--r--src/lua/lua_map.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c
index a5defd011..25e7bdc92 100644
--- a/src/lua/lua_map.c
+++ b/src/lua/lua_map.c
@@ -442,6 +442,10 @@ lua_map_fin (struct map_cb_data *data, void **target)
msg_err_map ("map has no callback set");
}
else if (cbdata->data != NULL && cbdata->data->len != 0) {
+
+ lua_pushcfunction (cbdata->L, &rspamd_lua_traceback);
+ int err_idx = lua_gettop (cbdata->L);
+
lua_rawgeti (cbdata->L, LUA_REGISTRYINDEX, cbdata->ref);
if (!cbdata->opaque) {
@@ -461,11 +465,15 @@ lua_map_fin (struct map_cb_data *data, void **target)
*pmap = cbdata->lua_map;
rspamd_lua_setclass (cbdata->L, "rspamd{map}", -1);
- if (lua_pcall (cbdata->L, 2, 0, 0) != 0) {
- msg_info_map ("call to %s failed: %s", "local function",
+ gint ret = lua_pcall (cbdata->L, 2, 0, err_idx);
+
+ if (ret != 0) {
+ msg_info_map ("call to %s failed (%d): %s", "map fin function",
+ ret,
lua_tostring (cbdata->L, -1));
- lua_pop (cbdata->L, 1);
}
+
+ lua_settop (cbdata->L, err_idx - 1);
}
cbdata->data = rspamd_fstring_assign (cbdata->data, "", 0);