{
struct rspamd_dns_request_ud *reqdata = (struct rspamd_dns_request_ud *)arg;
+ if (reqdata->item) {
+ rspamd_symbols_cache_set_cur_item (reqdata->task, reqdata->item);
+ }
+
if (reqdata->reply) {
reqdata->cb (reqdata->reply, reqdata->ud);
}
if (pool == NULL) {
g_free (reqdata);
}
+
return NULL;
}
lua_pushboolean (L, reply->authenticated);
+ if (cd->item) {
+ /* We also need to restore the item in case there are some chains */
+ rspamd_symbols_cache_set_cur_item (cd->task, cd->item);
+ }
+
if (lua_pcall (L, 6, 0, err_idx) != 0) {
tb = lua_touserdata (L, -1);
}
}
else {
+ /* Fail-safety as this function can, in theory, call
+ * lua_dns_resolver_callback without switching to the event loop
+ */
+ if (cbdata->item) {
+ rspamd_symcache_item_async_inc (task, cbdata->item);
+ }
+
if (forced) {
ret = make_dns_request_task_forced (task,
lua_dns_resolver_callback,
}
/* callback was set up */
lua_pushboolean (L, TRUE);
- } else {
+ }
+ else {
lua_pushnil (L);
}
+
+ if (cbdata->item) {
+ rspamd_symcache_item_async_dec_check (task, cbdata->item);
+ }
}
}
else {