#include "timer.h"
#include "health-sessiond.h"
#include "rotation-thread.h"
+#include "thread.h"
#define LTTNG_SESSIOND_SIG_QS SIGRTMIN + 10
#define LTTNG_SESSIOND_SIG_EXIT SIGRTMIN + 11
int ret;
assert(session);
+ assert(session->rotation_pending_check_timer_enabled);
DBG("Disabling session rotation pending check timer on session %" PRIu64,
session->id);
ret = -1;
goto end;
}
- DBG("Enabling scheduled rotation timer on session \"%s\" (%ui ยตs)", session->name,
- interval_us);
+ DBG("Enabling scheduled rotation timer on session \"%s\" (%ui %s)", session->name,
+ interval_us, USEC_UNIT);
ret = timer_start(&session->rotation_schedule_timer, session,
interval_us, LTTNG_SESSIOND_SIG_SCHEDULED_ROTATION,
/* one-shot */ false);
/*
* This thread is the sighandler for the timer signals.
*/
-void *timer_thread_func(void *data)
+static
+void *thread_timer(void *data)
{
int signr;
sigset_t mask;
rotation_thread_enqueue_job(ctx->rotation_thread_job_queue,
ROTATION_THREAD_JOB_TYPE_CHECK_PENDING_ROTATION,
session);
- session_lock_list();
- session_put(session);
- session_unlock_list();
} else if (signr == LTTNG_SESSIOND_SIG_SCHEDULED_ROTATION) {
rotation_thread_enqueue_job(ctx->rotation_thread_job_queue,
ROTATION_THREAD_JOB_TYPE_SCHEDULED_ROTATION,
return NULL;
}
-void timer_exit(void)
+static
+bool shutdown_timer_thread(void *data)
+{
+ return kill(getpid(), LTTNG_SESSIOND_SIG_EXIT) == 0;
+}
+
+bool launch_timer_thread(
+ struct timer_thread_parameters *timer_thread_parameters)
{
- kill(getpid(), LTTNG_SESSIOND_SIG_EXIT);
+ struct lttng_thread *thread;
+
+ thread = lttng_thread_create("Timer",
+ thread_timer,
+ shutdown_timer_thread,
+ NULL,
+ timer_thread_parameters);
+ if (!thread) {
+ goto error;
+ }
+ lttng_thread_put(thread);
+ return true;
+error:
+ return false;
}