if (check) {
msg_debug_cache_task ("execute %s, %d", item->symbol, item->id);
+#ifdef HAVE_EVENT_NO_CACHE_TIME_FUNC
+ struct timeval tv;
+
+ event_base_update_cache_time (task->ev_base);
+ event_base_gettimeofday_cached (task->ev_base, &tv);
+ t1 = tv_to_double (&tv);
+#else
t1 = rspamd_get_ticks (FALSE);
+#endif
dyn_item->start_msec = (t1 - task->time_real) * 1e3;
dyn_item->async_events = 0;
checkpoint->cur_item = item;
checkpoint->items_inflight --;
checkpoint->cur_item = NULL;
+#ifdef HAVE_EVENT_NO_CACHE_TIME_FUNC
+ event_base_update_cache_time (task->ev_base);
+ event_base_gettimeofday_cached (task->ev_base, &tv);
+ t2 = tv_to_double (&tv);
+#else
t2 = rspamd_get_ticks (FALSE);
+#endif
+
diff = ((t2 - task->time_real) * 1e3 - dyn_item->start_msec);
if (G_UNLIKELY (RSPAMD_TASK_IS_PROFILING (task))) {
new_task->ev_base = ev_base;
- new_task->time_real = rspamd_get_ticks (FALSE);
- double_to_tv (new_task->time_real, &new_task->tv);
+#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 = tv_to_double (&new_task->tv);
+#endif
new_task->time_virtual = rspamd_get_virtual_ticks ();
new_task->time_real_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;