Add UST namespace contexts
[lttng-tools.git] / src / bin / lttng-sessiond / timer.c
index 4bff7bd76cea0497c311f12b7026b0142761710c..c65df5c2dc132706b1a6335e0d73ecff10eabf00 100644 (file)
@@ -24,6 +24,7 @@
 #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
@@ -248,6 +249,7 @@ int timer_session_rotation_pending_check_stop(struct ltt_session *session)
        int ret;
 
        assert(session);
+       assert(session->rotation_pending_check_timer_enabled);
 
        DBG("Disabling session rotation pending check timer on session %" PRIu64,
                        session->id);
@@ -277,8 +279,8 @@ int timer_session_rotation_schedule_timer_start(struct ltt_session *session,
                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);
@@ -343,7 +345,8 @@ int timer_signal_init(void)
 /*
  * 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;
@@ -390,9 +393,6 @@ void *timer_thread_func(void *data)
                        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,
@@ -416,7 +416,27 @@ end:
        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;
 }
This page took 0.024318 seconds and 4 git commands to generate.