X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Frotation-thread.c;h=900892bdb12bb8ad174f1248a4f4e2728278b3c0;hb=71a3bb01e288ad6e611be0501a4444375c4124a7;hp=d39aad80b413e888a9d6859a5be17473e7b11e0f;hpb=cea6c68e33a159a83b52d0931d355051d89283a2;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/rotation-thread.c b/src/bin/lttng-sessiond/rotation-thread.c index d39aad80b..900892bdb 100644 --- a/src/bin/lttng-sessiond/rotation-thread.c +++ b/src/bin/lttng-sessiond/rotation-thread.c @@ -42,6 +42,7 @@ #include "cmd.h" #include "session.h" #include "sessiond-timer.h" +#include "notification-thread-commands.h" #include #include @@ -261,8 +262,11 @@ error: static void fini_thread_state(struct rotation_thread_state *state) { + int ret; + lttng_poll_clean(&state->events); - cds_lfht_destroy(channel_pending_rotate_ht, NULL); + ret = cds_lfht_destroy(channel_pending_rotate_ht, NULL); + assert(!ret); if (rotate_notification_channel) { lttng_notification_channel_destroy(rotate_notification_channel); } @@ -406,7 +410,23 @@ int handle_channel_rotation_pipe(int fd, uint32_t revents, goto end_unlock_session; } } else { + struct lttng_trace_archive_location *location; + session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; + /* Ownership of location is transferred. */ + location = session_get_trace_archive_location(session); + ret = notification_thread_command_session_rotation_completed( + notification_thread_handle, + session->name, + session->uid, + session->gid, + session->current_archive_id, + location); + if (ret != LTTNG_OK) { + ERR("Failed to notify notification thread that rotation is complete for session %s", + session->name); + } + } DBG("Rotation completed for session %s", session->name); } @@ -433,12 +453,14 @@ int rotate_pending_relay_timer(struct ltt_session *session) DBG("[rotation-thread] Check rotate pending on session %" PRIu64, session->id); - ret = relay_rotate_pending(session, session->rotate_count - 1); + ret = relay_rotate_pending(session, session->current_archive_id - 1); if (ret < 0) { ERR("[rotation-thread] Check relay rotate pending"); goto end; } if (ret == 0) { + struct lttng_trace_archive_location *location; + DBG("[rotation-thread] Rotation completed on the relay for " "session %" PRIu64, session->id); /* @@ -447,6 +469,21 @@ int rotate_pending_relay_timer(struct ltt_session *session) */ session->rotate_pending_relay = false; session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; + + session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; + /* Ownership of location is transferred. */ + location = session_get_trace_archive_location(session); + ret = notification_thread_command_session_rotation_completed( + notification_thread_handle, + session->name, + session->uid, + session->gid, + session->current_archive_id, + location); + if (ret != LTTNG_OK) { + ERR("Failed to notify notification thread that rotation is complete for session %s", + session->name); + } } else if (ret == 1) { DBG("[rotation-thread] Rotation still pending on the relay for " "session %" PRIu64, session->id);