gdouble t2, diff;
guint i;
struct timeval tv;
- const gdouble slow_diff_limit = 0.1;
+ const gdouble slow_diff_limit = 0.3;
/* Sanity checks */
g_assert (checkpoint->items_inflight > 0);
* event to decrease async events count and call this function
* one more time
*/
- msg_debug_cache_task ("postpone finalisation of %s as there are %d "
- "async events pendning", item->symbol, item->async_events);
+ msg_debug_cache_task ("postpone finalisation of %s(%d) as there are %d "
+ "async events pendning",
+ item->symbol, item->id, item->async_events);
return;
}
- msg_debug_cache_task ("process finalize for item %s", item->symbol);
+ msg_debug_cache_task ("process finalize for item %s(%d)", item->symbol, item->id);
SET_FINISH_BIT (checkpoint, item);
checkpoint->items_inflight --;
checkpoint->cur_item = NULL;
if (!(item->type & SYMBOL_TYPE_SQUEEZED)) {
if (diff > slow_diff_limit) {
- msg_info_task ("slow rule: %s: %.2f ms", item->symbol,
+ msg_info_task ("slow rule: %s(%d): %.2f ms", item->symbol, item->id,
diff * 1000);
}
struct rspamd_task *task = NULL;
GError *err = NULL;
gboolean forced = FALSE;
+ struct rspamd_symcache_item *item = NULL;
/* Check arguments */
if (!rspamd_lua_parse_table_arguments (L, first, &err,
if (task) {
pool = task->task_pool;
session = task->s;
+ item = rspamd_symbols_cache_get_cur_item (task);
}
if (to_resolve != NULL) {
/* 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, M);
+ if (item) {
+ rspamd_symcache_item_async_inc (task, item, M);
}
if (forced) {
if (ret) {
cbdata->s = session;
- cbdata->item = rspamd_symbols_cache_get_cur_item (task);
- if (cbdata->item) {
- rspamd_symcache_item_async_inc (task, cbdata->item, M);
+
+ if (item) {
+ cbdata->item = item;
+ rspamd_symcache_item_async_inc (task, item, M);
}
/* callback was set up */
lua_pushboolean (L, TRUE);
lua_pushnil (L);
}
- if (cbdata->item) {
- rspamd_symcache_item_async_dec_check (task, cbdata->item, M);
+ if (item) {
+ rspamd_symcache_item_async_dec_check (task, item, M);
}
}
}
lua_rawgeti (L, LUA_REGISTRYINDEX, cbd->cbref);
lua_pushstring (L, err);
+
+ if (cbd->item) {
+ rspamd_symbols_cache_set_cur_item (cbd->task, cbd->item);
+ }
+
if (lua_pcall (L, 1, 0, 0) != 0) {
msg_info ("callback call failed: %s", lua_tostring (L, -1));
lua_pop (L, 1);
/* Data is nil */
lua_pushnil (cbs.L);
+ if (ud->item) {
+ rspamd_symbols_cache_set_cur_item (ud->task, ud->item);
+ }
+
if (lua_pcall (cbs.L, 2, 0, 0) != 0) {
msg_info ("call to callback failed: %s", lua_tostring (cbs.L, -1));
lua_pop (cbs.L, 1);
return FALSE;
}
+#if 0
if (!(cbd->flags & LUA_TCP_FLAG_RESOLVED)) {
/* We come here without resolving, so we need to add a watcher */
lua_tcp_register_watcher (cbd);
else {
cbd->flags |= LUA_TCP_FLAG_RESOLVED;
}
+#endif
lua_tcp_register_event (cbd);
if (rspamd_parse_inet_address (&cbd->addr, host, 0)) {
rspamd_inet_address_set_port (cbd->addr, port);
/* Host is numeric IP, no need to resolve */
+ lua_tcp_register_watcher (cbd);
+
if (!lua_tcp_make_connection (cbd)) {
lua_pushboolean (L, FALSE);
}
}
else {
+ cbd->item = rspamd_symbols_cache_get_cur_item (task);
+
if (!make_dns_request_task (task, lua_tcp_dns_handler, cbd,
RDNS_REQUEST_A, host)) {
lua_pushboolean (L, FALSE);