Launch the timer thread using lttng_thread
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 4749f8621b62d1b0512304dcbac6677fd1e79124..c82e0095bc1e476b015a164a61975a661d39ff95 100644 (file)
@@ -194,8 +194,6 @@ static pthread_t kernel_thread;
 static pthread_t dispatch_thread;
 static pthread_t agent_reg_thread;
 static pthread_t load_session_thread;
-static pthread_t rotation_thread;
-static pthread_t timer_thread;
 
 /*
  * UST registration command queue. This queue is tied with a futex and uses a N
@@ -255,9 +253,6 @@ static const char * const config_section_name = "sessiond";
 /* Am I root or not. Set to 1 if the daemon is running as root */
 static int is_root;
 
-/* Rotation thread handle. */
-static struct rotation_thread_handle *rotation_thread_handle;
-
 /*
  * Stop all threads by closing the thread quit pipe.
  */
@@ -5496,10 +5491,10 @@ int main(int argc, char **argv)
        struct lttng_pipe *ust32_channel_monitor_pipe = NULL,
                        *ust64_channel_monitor_pipe = NULL,
                        *kernel_channel_monitor_pipe = NULL;
-       bool rotation_thread_launched = false;
-       bool timer_thread_launched = false;
        struct lttng_thread *ht_cleanup_thread = NULL;
-       struct timer_thread_parameters timer_thread_ctx;
+       struct timer_thread_parameters timer_thread_parameters;
+       /* Rotation thread handle. */
+       struct rotation_thread_handle *rotation_thread_handle = NULL;
        /* Queue of rotation jobs populated by the sessiond-timer. */
        struct rotation_thread_timer_queue *rotation_timer_queue = NULL;
 
@@ -5696,7 +5691,8 @@ int main(int argc, char **argv)
                retval = -1;
                goto exit_init_data;
        }
-       timer_thread_ctx.rotation_thread_job_queue = rotation_timer_queue;
+       timer_thread_parameters.rotation_thread_job_queue =
+                       rotation_timer_queue;
 
        ust64_channel_monitor_pipe = lttng_pipe_open(0);
        if (!ust64_channel_monitor_pipe) {
@@ -5865,20 +5861,13 @@ int main(int argc, char **argv)
        if (!launch_notification_thread(notification_thread_handle)) {
                retval = -1;
                goto exit_notification;
-
        }
 
        /* Create timer thread. */
-       ret = pthread_create(&timer_thread, default_pthread_attr(),
-                       timer_thread_func, &timer_thread_ctx);
-       if (ret) {
-               errno = ret;
-               PERROR("pthread_create timer");
+       if (!launch_timer_thread(&timer_thread_parameters)) {
                retval = -1;
-               stop_threads();
                goto exit_notification;
        }
-       timer_thread_launched = true;
 
        /* rotation_thread_data acquires the pipes' read side. */
        rotation_thread_handle = rotation_thread_handle_create(
@@ -5892,16 +5881,10 @@ int main(int argc, char **argv)
        }
 
        /* Create rotation thread. */
-       ret = pthread_create(&rotation_thread, default_pthread_attr(),
-                       thread_rotation, rotation_thread_handle);
-       if (ret) {
-               errno = ret;
-               PERROR("pthread_create rotation");
+       if (!launch_rotation_thread(rotation_thread_handle)) {
                retval = -1;
-               stop_threads();
                goto exit_rotation;
        }
-       rotation_thread_launched = true;
 
        /* Create thread to manage the client socket */
        ret = pthread_create(&client_thread, default_pthread_attr(),
@@ -6098,42 +6081,23 @@ exit_init_data:
         */
        rcu_barrier();
 
-       if (rotation_thread_handle) {
-               if (rotation_thread_launched) {
-                       ret = pthread_join(rotation_thread, &status);
-                       if (ret) {
-                               errno = ret;
-                               PERROR("pthread_join rotation thread");
-                               retval = -1;
-                       }
-               }
-               rotation_thread_handle_destroy(rotation_thread_handle);
-       }
-
-       if (timer_thread_launched) {
-               timer_exit();
-               ret = pthread_join(timer_thread, &status);
-               if (ret) {
-                       errno = ret;
-                       PERROR("pthread_join timer thread");
-                       retval = -1;
-               }
-       }
-
        if (ht_cleanup_thread) {
                lttng_thread_shutdown(ht_cleanup_thread);
                lttng_thread_put(ht_cleanup_thread);
        }
 
+       rcu_thread_offline();
+       rcu_unregister_thread();
+
+       if (rotation_thread_handle) {
+               rotation_thread_handle_destroy(rotation_thread_handle);
+       }
+
        /*
         * After the rotation and timer thread have quit, we can safely destroy
         * the rotation_timer_queue.
         */
        rotation_thread_timer_queue_destroy(rotation_timer_queue);
-
-       rcu_thread_offline();
-       rcu_unregister_thread();
-
        /*
         * The teardown of the notification system is performed after the
         * session daemon's teardown in order to allow it to be notified
This page took 0.025364 seconds and 5 git commands to generate.