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);
}
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;
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,
end:
lttng_notification_destroy(notification);
- if (ret != 0) {
- goto end;
- }
-
-
return ret;
}
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) {