X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=src%2Fbin%2Flttng-sessiond%2Frotation-thread.c;h=a0b924865d3e02fe04fc5ebd5c2517cb69ee165e;hb=4a224750266970206a160541f575cf12c361968f;hp=e8bd478e8db032934690979c86469b8de444d9f4;hpb=8898b0da5977284d7919d9221d9538d3ad77fd6f;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/rotation-thread.c b/src/bin/lttng-sessiond/rotation-thread.c index e8bd478e8..a0b924865 100644 --- a/src/bin/lttng-sessiond/rotation-thread.c +++ b/src/bin/lttng-sessiond/rotation-thread.c @@ -527,6 +527,19 @@ int check_session_rotation_pending(struct ltt_session *session, DBG("[rotation-thread] Checking for pending rotation on session \"%s\", trace archive %" PRIu64, session->name, session->current_archive_id - 1); + /* + * The rotation-pending check timer of a session is launched in + * one-shot mode. If the rotation is incomplete, the rotation + * thread will re-enable the pending-check timer. + * + * The timer thread can't stop the timer itself since it is involved + * in the check for the timer's quiescence. + */ + ret = timer_session_rotation_pending_check_stop(session); + if (ret) { + goto end; + } + if (session->rotation_pending_local) { /* Updates session->rotation_pending_local as needed. */ ret = check_session_rotation_pending_local(session); @@ -751,6 +764,7 @@ int handle_job_queue(struct rotation_thread_handle *handle, session_lock(session); ret = run_job(job, session, handle->notification_thread_handle); session_unlock(session); + /* Release reference held by the job. */ session_put(session); session_unlock_list(); free(job);