#include <common/compat/poll.h>
#include <common/hashtable/hashtable.h>
#include <pthread.h>
+#include <semaphore.h>
#include "session.h"
+/*
+ * The timer thread enqueues struct sessiond_rotation_timer objects in the list
+ * and wake up the rotation thread. When the rotation thread wakes up, it
+ * empties the queue.
+ */
+struct rotation_thread_timer_queue {
+ struct lttng_pipe *event_pipe;
+ struct cds_list_head list;
+ pthread_mutex_t lock;
+};
+
struct rotation_thread_handle {
/*
* Read side of pipes used to communicate with the rotation thread.
int kernel_consumer;
/* quit pipe */
int thread_quit_pipe;
+
+ struct rotation_thread_timer_queue *rotation_timer_queue;
+
+ /* Access to the notification thread cmd_queue */
+ struct notification_thread_handle *notification_thread_handle;
+
+ sem_t *notification_thread_ready;
};
struct rotation_thread_handle *rotation_thread_handle_create(
struct lttng_pipe *ust32_channel_rotate_pipe,
struct lttng_pipe *ust64_channel_rotate_pipe,
struct lttng_pipe *kernel_channel_rotate_pipe,
- int thread_quit_pipe);
+ int thread_quit_pipe,
+ struct rotation_thread_timer_queue *rotation_timer_queue,
+ struct notification_thread_handle *notification_thread_handle,
+ sem_t *notification_thread_ready);
void rotation_thread_handle_destroy(
struct rotation_thread_handle *handle);