X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Frotation-thread.c;h=dcae248b4088c5aa068b871afbc37871176f532b;hp=9f15ed06edacbae130cef7ac9e4c0c7793ecee87;hb=ad9f5c17782ec9d5fe735bcb0f3d7b52199f8feb;hpb=90936dcf0968343f20b2f6fd365b9c015cdb9717 diff --git a/src/bin/lttng-sessiond/rotation-thread.c b/src/bin/lttng-sessiond/rotation-thread.c index 9f15ed06e..dcae248b4 100644 --- a/src/bin/lttng-sessiond/rotation-thread.c +++ b/src/bin/lttng-sessiond/rotation-thread.c @@ -395,7 +395,6 @@ int handle_channel_rotation_pipe(int fd, uint32_t revents, goto end_unlock_session; } session->rotate_pending = false; - session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; session->last_chunk_start_ts = session->current_chunk_start_ts; if (session->rotate_pending_relay) { ret = sessiond_timer_rotate_pending_start( @@ -406,6 +405,8 @@ int handle_channel_rotation_pipe(int fd, uint32_t revents, ret = -1; goto end_unlock_session; } + } else { + session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; } DBG("Rotation completed for session %s", session->name); } @@ -432,7 +433,7 @@ 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; @@ -445,6 +446,7 @@ int rotate_pending_relay_timer(struct ltt_session *session) * rotations can start now. */ session->rotate_pending_relay = false; + session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; } else if (ret == 1) { DBG("[rotation-thread] Rotation still pending on the relay for " "session %" PRIu64, session->id); @@ -680,11 +682,25 @@ int handle_notification_channel(int fd, uint32_t revents, struct rotation_thread_state *state) { int ret; - struct lttng_notification *notification; + bool notification_pending; + struct lttng_notification *notification = NULL; enum lttng_notification_channel_status status; const struct lttng_evaluation *notification_evaluation; const struct lttng_condition *notification_condition; + status = lttng_notification_channel_has_pending_notification( + rotate_notification_channel, ¬ification_pending); + if (status != LTTNG_NOTIFICATION_CHANNEL_STATUS_OK) { + ERR("[rotation-thread ]Error occured while checking for pending notification"); + ret = -1; + goto end; + } + + if (!notification_pending) { + ret = 0; + goto end; + } + /* Receive the next notification. */ status = lttng_notification_channel_get_next_notification( rotate_notification_channel, @@ -716,11 +732,6 @@ int handle_notification_channel(int fd, uint32_t revents, end: lttng_notification_destroy(notification); - if (ret != 0) { - goto end; - } - - return ret; } @@ -794,7 +805,7 @@ void *thread_rotation(void *data) ret = handle_channel_rotation_pipe(fd, revents, handle, &state); if (ret) { - ERR("[rotation-thread] Handle channel rotation pipe"); + ERR("[rotation-thread] Failed to handle channel rotation pipe"); goto error; } } else if (fd == rotate_notification_channel->socket) {