if (lua_isfunction (L, -1)) {
task = rspamd_task_new (session->ctx->worker, session->cfg,
- session->pool, ctx->lang_det);
+ session->pool, ctx->lang_det, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
task->s = rspamd_session_create (session->pool,
rspamd_controller_history_lua_fin_task,
NULL,
}
task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool,
- ctx->lang_det);
+ ctx->lang_det, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
-
task->s = rspamd_session_create (session->pool,
rspamd_controller_lua_fin_task,
NULL,
}
task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool,
- session->ctx->lang_det);
+ session->ctx->lang_det, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
-
-
task->s = rspamd_session_create (session->pool,
rspamd_controller_learn_fin_task,
NULL,
}
task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool,
- ctx->lang_det);
- task->ev_base = session->ctx->ev_base;
+ ctx->lang_det, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
-
task->s = rspamd_session_create (session->pool,
rspamd_controller_check_fin_task,
NULL,
ctx = session->ctx;
task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool,
- ctx->lang_det);
+ ctx->lang_det, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
cbdata = rspamd_mempool_alloc0 (session->pool, sizeof (*cbdata));
cbdata->conn_ent = conn_ent;
cbdata->task = task;
}
task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool,
- ctx->lang_det);
+ ctx->lang_det, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
-
task->s = rspamd_session_create (session->pool,
rspamd_controller_lua_fin_task,
NULL,
*/
struct rspamd_task *
rspamd_task_new (struct rspamd_worker *worker, struct rspamd_config *cfg,
- rspamd_mempool_t *pool,
- struct rspamd_lang_detector *lang_det)
+ rspamd_mempool_t *pool,
+ struct rspamd_lang_detector *lang_det,
+ struct event_base *ev_base)
{
struct rspamd_task *new_task;
}
}
+ new_task->ev_base = ev_base;
+
+#ifdef HAVE_EVENT_NO_CACHE_TIME_FUNC
+ if (ev_base) {
+ event_base_update_cache_time (ev_base);
+ event_base_gettimeofday_cached (ev_base, &new_task->tv);
+ new_task->time_real = tv_to_double (&new_task->tv);
+ }
+ else {
+ gettimeofday (&new_task->tv, NULL);
+ new_task->time_real = tv_to_double (&new_task->tv);
+ }
+#else
gettimeofday (&new_task->tv, NULL);
- new_task->time_real = rspamd_get_ticks (FALSE);
+ new_task->time_real = tv_to_double (&new_task->tv);
+#endif
+
new_task->time_virtual = rspamd_get_virtual_ticks ();
new_task->time_real_finish = NAN;
new_task->time_virtual_finish = NAN;
gboolean
rspamd_task_set_finish_time (struct rspamd_task *task)
{
+ struct timeval tv;
+
if (isnan (task->time_real_finish)) {
- task->time_real_finish = rspamd_get_ticks (FALSE);
+
+#ifdef HAVE_EVENT_NO_CACHE_TIME_FUNC
+ if (task->ev_base) {
+ event_base_update_cache_time (task->ev_base);
+ event_base_gettimeofday_cached (task->ev_base, &tv);
+ task->time_real_finish = tv_to_double (&tv);
+ }
+ else {
+ gettimeofday (&tv, NULL);
+ task->time_real_finish = tv_to_double (&tv);
+ }
+#else
+ gettimeofday (&tv, NULL);
+ task->time_real_finish = tv_to_double (&tv);
+#endif
task->time_virtual_finish = rspamd_get_virtual_ticks ();
return TRUE;
* Construct new task for worker
*/
struct rspamd_task *rspamd_task_new (struct rspamd_worker *worker,
- struct rspamd_config *cfg,
- rspamd_mempool_t *pool,
- struct rspamd_lang_detector *lang_det);
+ struct rspamd_config *cfg,
+ rspamd_mempool_t *pool,
+ struct rspamd_lang_detector *lang_det,
+ struct event_base *ev_base);
/**
* Destroy task object and remove its IO dispatcher if it exists
*/
err = strerror (errno);
}
else {
- task = rspamd_task_new (NULL, cfg, NULL, NULL);
+ task = rspamd_task_new (NULL, cfg, NULL, NULL, NULL);
task->msg.begin = map;
task->msg.len = sz;
rspamd_mempool_add_destructor (task->task_pool,
}
}
- task = rspamd_task_new (NULL, cfg, NULL, NULL);
+ task = rspamd_task_new (NULL, cfg, NULL, NULL, NULL);
task->msg.begin = g_strdup (str_message);
task->msg.len = message_len;
rspamd_mempool_add_destructor (task->task_pool, lua_task_free_dtor, task);
if (cfg != NULL && message != NULL) {
base = event_init ();
rspamd_init_filters (cfg, FALSE);
- task = rspamd_task_new (NULL, cfg, NULL, NULL);
- task->ev_base = base;
+ task = rspamd_task_new (NULL, cfg, NULL, NULL, base);
task->msg.begin = rspamd_mempool_alloc (task->task_pool, mlen);
rspamd_strlcpy ((gpointer)task->msg.begin, message, mlen);
task->msg.len = mlen;
struct fuzzy_ctx *fuzzy_module_ctx;
/* Prepare task */
- task = rspamd_task_new (session->wrk, session->cfg, NULL, session->lang_det);
+ task = rspamd_task_new (session->wrk, session->cfg, NULL,
+ session->lang_det, conn_ent->rt->ev_base);
task->cfg = ctx->cfg;
- task->ev_base = conn_ent->rt->ev_base;
saved = rspamd_mempool_alloc0 (session->pool, sizeof (gint));
err = rspamd_mempool_alloc0 (session->pool, sizeof (GError *));
fuzzy_module_ctx = fuzzy_get_context (ctx->cfg);
rspamd_printf ("cannot open %s: %s\n", argv[i], strerror (errno));
}
else {
- task = rspamd_task_new (NULL, rspamd_main->cfg, NULL, NULL);
+ task = rspamd_task_new (NULL, rspamd_main->cfg, NULL, NULL, NULL);
if (!rspamd_task_load_message (task, NULL, map, len)) {
rspamd_printf ("cannot load %s\n", argv[i]);
msg = session->client_message;
task = rspamd_task_new (session->worker, session->ctx->cfg,
- session->pool, session->ctx->lang_det);
+ session->pool, session->ctx->lang_det,
+ session->ctx->ev_base);
task->flags |= RSPAMD_TASK_FLAG_MIME;
task->sock = -1;
task->resolver = session->ctx->resolver;
/* TODO: allow to disable autolearn in protocol */
task->flags |= RSPAMD_TASK_FLAG_LEARN_AUTO;
- task->ev_base = session->ctx->ev_base;
task->s = rspamd_session_create (task->task_pool, rspamd_proxy_task_fin,
NULL, (event_finalizer_t )rspamd_task_free, task);
data = rspamd_http_message_get_body (msg, &len);
if (cfg->finish_callbacks) {
ctx = worker->ctx;
/* Create a fake task object for async events */
- task = rspamd_task_new (worker, cfg, NULL, NULL);
+ task = rspamd_task_new (worker, cfg, NULL, NULL, ctx->ev_base);
task->resolver = ctx->resolver;
- task->ev_base = ctx->ev_base;
task->flags |= RSPAMD_TASK_FLAG_PROCESSING;
task->s = rspamd_session_create (task->task_pool,
rspamd_worker_finalize,
return;
}
- task = rspamd_task_new (worker, ctx->cfg, NULL, ctx->lang_det);
+ task = rspamd_task_new (worker, ctx->cfg, NULL, ctx->lang_det, ctx->ev_base);
msg_info_task ("accepted connection from %s port %d, task ptr: %p",
rspamd_inet_address_to_string (addr),
ctx->keys_cache,
NULL);
rspamd_http_connection_set_max_size (task->http_conn, task->cfg->max_message);
- task->ev_base = ctx->ev_base;
worker->nconns++;
rspamd_mempool_add_destructor (task->task_pool,
(rspamd_mempool_destruct_t)reduce_tasks_count, worker);