struct relay_stream {
uint64_t stream_handle;
- /*
- * reflock used to synchronize the closing of this stream.
- * stream reflock nests inside viewer stream reflock.
- * stream reflock nests inside index reflock.
- */
- pthread_mutex_t reflock;
struct urcu_ref ref;
/* Back reference to trace. Protected by refcount on trace object. */
struct ctf_trace *trace;
/* FD on which to write the stream data. */
struct stream_fd *stream_fd;
- /* FD on which to write the index data. */
- struct stream_fd *index_fd;
+ /* index file on which to write the index data. */
+ struct lttng_index_file *index_file;
char *path_name;
char *channel_name;
uint64_t tracefile_size_current;
uint64_t tracefile_count;
+ /*
+ * Position in the tracefile where we have the full index also on disk.
+ */
+ uint64_t pos_after_last_complete_data_index;
+
/*
* Counts the number of received indexes. The "tag" associated
* with an index is taken before incrementing this seqcount.
struct lttng_ht_node_u64 node;
bool in_stream_ht; /* is stream in stream hash table. */
struct rcu_head rcu_node; /* For call_rcu teardown. */
+ /*
+ * When we have written the data and index corresponding to this
+ * seq_num, rotate the tracefile (session rotation). The path_name is
+ * already up-to-date.
+ * This is set to -1ULL when no rotation is pending.
+ *
+ * Always access with stream lock held.
+ */
+ uint64_t rotate_at_seq_num;
+ /*
+ * This is the id of the chunk where we are writing to if no rotation is
+ * pending (rotate_at_seq_num == -1ULL). If a rotation is pending, this
+ * is the chunk_id we will have after the rotation. It must be updated
+ * atomically with rotate_at_seq_num.
+ *
+ * Always access with stream lock held.
+ */
+ uint64_t chunk_id;
};
struct relay_stream *stream_create(struct ctf_trace *trace,