X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftimer.c;h=56fc4635a312211a8772330fcfec7c57816e407e;hp=d70d16710c91e7200f1a0c78f078e3d68a00c201;hb=7ca172c15891d4ff3f711dcc05f991fd2c094bc7;hpb=3cf0ebeef90a629c59333544a9fb3bd75f2dbfc6 diff --git a/src/bin/lttng-sessiond/timer.c b/src/bin/lttng-sessiond/timer.c index d70d16710..56fc4635a 100644 --- a/src/bin/lttng-sessiond/timer.c +++ b/src/bin/lttng-sessiond/timer.c @@ -1,19 +1,9 @@ /* - * Copyright (C) 2017 - Julien Desfossez - * Copyright (C) 2018 - Jérémie Galarneau + * Copyright (C) 2017 Julien Desfossez + * Copyright (C) 2018 Jérémie Galarneau * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define _LGPL_SOURCE @@ -24,6 +14,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 @@ -278,8 +269,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); @@ -344,7 +335,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; @@ -388,15 +380,9 @@ void *timer_thread_func(void *data) struct ltt_session *session = (struct ltt_session *) info.si_value.sival_ptr; - session_lock_list(); - session_lock(session); - /* Acquires a reference to the session. */ rotation_thread_enqueue_job(ctx->rotation_thread_job_queue, ROTATION_THREAD_JOB_TYPE_CHECK_PENDING_ROTATION, session); - /* Release the timer's reference to the session. */ - (void) timer_session_rotation_pending_check_stop(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, @@ -420,7 +406,27 @@ end: return NULL; } -void timer_exit(void) +static +bool shutdown_timer_thread(void *data) { - kill(getpid(), LTTNG_SESSIOND_SIG_EXIT); + return kill(getpid(), LTTNG_SESSIOND_SIG_EXIT) == 0; +} + +bool launch_timer_thread( + struct timer_thread_parameters *timer_thread_parameters) +{ + 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; }