+ /*
+ * Subscribe/unsubscribe the rotation_thread's notification_channel to/from
+ * session usage notifications to perform size-based rotations.
+ */
+ void subscribe_session_consumed_size_rotation(ltt_session& session, std::uint64_t size);
+ void unsubscribe_session_consumed_size_rotation(ltt_session& session);
+
+private:
+ void _thread_function() noexcept;
+ void _run();
+ void _handle_job_queue();
+ void _handle_notification(const lttng_notification& notification);
+ void _handle_notification_channel_activity();
+
+ struct rotation_thread_timer_queue& _rotation_timer_queue;
+ /* Access to the notification thread cmd_queue */
+ notification_thread_handle& _notification_thread_handle;
+ /* Thread-specific quit pipe. */
+ lttng_pipe::uptr _quit_pipe;
+ lttng_notification_channel::uptr _notification_channel;
+ /*
+ * Use an event_fd to wake-up the rotation thread whenever a command
+ * completes on the notification channel. This ensures that any
+ * notification that was queued while waiting for a reply to the command is
+ * eventually consumed.
+ */
+ lttng::eventfd _notification_channel_subscribtion_change_eventfd;
+ lttng_poll_event _events;
+};
+
+struct rotation_thread_timer_queue *rotation_thread_timer_queue_create(void);
+void rotation_thread_timer_queue_destroy(struct rotation_thread_timer_queue *queue);