}
msg_iter_data->ds_file_info_index++;
- bt_msg_iter_reset(msg_iter_data->msg_iter);
+ bt_msg_iter_reset_for_next_stream_file(
+ msg_iter_data->msg_iter);
set_msg_iter_emits_stream_beginning_end_messages(
msg_iter_data);
return status;
}
+static
+int ctf_fs_iterator_reset(struct ctf_fs_msg_iter_data *msg_iter_data)
+{
+ int ret;
+
+ msg_iter_data->ds_file_info_index = 0;
+ ret = msg_iter_data_set_current_ds_file(msg_iter_data);
+ if (ret) {
+ goto end;
+ }
+
+ bt_msg_iter_reset(msg_iter_data->msg_iter);
+ set_msg_iter_emits_stream_beginning_end_messages(msg_iter_data);
+
+end:
+ return ret;
+}
+
+BT_HIDDEN
+bt_self_message_iterator_status ctf_fs_iterator_seek_beginning(
+ bt_self_message_iterator *it)
+{
+ struct ctf_fs_msg_iter_data *msg_iter_data =
+ bt_self_message_iterator_get_data(it);
+ bt_self_message_iterator_status status =
+ BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
+
+ BT_ASSERT(msg_iter_data);
+ if (ctf_fs_iterator_reset(msg_iter_data)) {
+ status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
+ }
+
+ return status;
+}
+
+BT_HIDDEN
void ctf_fs_iterator_finalize(bt_self_message_iterator *it)
{
ctf_fs_msg_iter_data_destroy(
bt_self_message_iterator_get_data(it));
}
+BT_HIDDEN
bt_self_message_iterator_status ctf_fs_iterator_init(
bt_self_message_iterator *self_msg_iter,
bt_self_component_source *self_comp,
struct ctf_fs_msg_iter_data *msg_iter_data = NULL;
bt_self_message_iterator_status ret =
BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
- int iret;
port_data = bt_self_component_port_get_data(
bt_self_component_port_output_as_self_component_port(
}
msg_iter_data->ds_file_group = port_data->ds_file_group;
- iret = msg_iter_data_set_current_ds_file(msg_iter_data);
- if (iret) {
+ if (ctf_fs_iterator_reset(msg_iter_data)) {
ret = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
goto error;
}
- set_msg_iter_emits_stream_beginning_end_messages(msg_iter_data);
bt_self_message_iterator_set_data(self_msg_iter,
msg_iter_data);
if (ret != BT_SELF_MESSAGE_ITERATOR_STATUS_OK) {
}
bt_stream_put_ref(ds_file_group->stream);
- bt_stream_class_put_ref(ds_file_group->stream_class);
g_free(ds_file_group);
}
static
struct ctf_fs_ds_file_group *ctf_fs_ds_file_group_create(
struct ctf_fs_trace *ctf_fs_trace,
- bt_stream_class *stream_class,
+ struct ctf_stream_class *sc,
uint64_t stream_instance_id)
{
struct ctf_fs_ds_file_group *ds_file_group;
}
ds_file_group->stream_id = stream_instance_id;
- BT_ASSERT(stream_class);
- ds_file_group->stream_class = stream_class;
- bt_stream_class_get_ref(ds_file_group->stream_class);
+ BT_ASSERT(sc);
+ ds_file_group->sc = sc;
ds_file_group->ctf_fs_trace = ctf_fs_trace;
goto end;
int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace,
const char *path)
{
- bt_stream_class *stream_class = NULL;
int64_t stream_instance_id = -1;
int64_t begin_ns = -1;
struct ctf_fs_ds_file_group *ds_file_group = NULL;
sc = ctf_trace_class_borrow_stream_class_by_id(ds_file->metadata->tc,
props.stream_class_id);
BT_ASSERT(sc);
- stream_class = sc->ir_sc;
- BT_ASSERT(stream_class);
stream_instance_id = props.data_stream_id;
if (props.snapshots.beginning_clock != UINT64_C(-1)) {
* group.
*/
ds_file_group = ctf_fs_ds_file_group_create(ctf_fs_trace,
- stream_class, stream_instance_id);
+ sc, UINT64_C(-1));
if (!ds_file_group) {
goto error;
}
ds_file_group = g_ptr_array_index(
ctf_fs_trace->ds_file_groups, i);
- if (ds_file_group->stream_class == stream_class &&
+ if (ds_file_group->sc == sc &&
ds_file_group->stream_id ==
stream_instance_id) {
break;
if (!ds_file_group) {
ds_file_group = ctf_fs_ds_file_group_create(ctf_fs_trace,
- stream_class, stream_instance_id);
+ sc, stream_instance_id);
if (!ds_file_group) {
goto error;
}
goto error;
}
- if (ds_file_group->stream_id == UINT64_C(-1)) {
- /* No stream ID: use 0 */
- ds_file_group->stream = bt_stream_create_with_id(
- ds_file_group->stream_class,
- ctf_fs_trace->trace,
- ctf_fs_trace->next_stream_id);
- ctf_fs_trace->next_stream_id++;
+ if (ds_file_group->sc->ir_sc) {
+ BT_ASSERT(ctf_fs_trace->trace);
+
+ if (ds_file_group->stream_id == UINT64_C(-1)) {
+ /* No stream ID: use 0 */
+ ds_file_group->stream = bt_stream_create_with_id(
+ ds_file_group->sc->ir_sc,
+ ctf_fs_trace->trace,
+ ctf_fs_trace->next_stream_id);
+ ctf_fs_trace->next_stream_id++;
+ } else {
+ /* Specific stream ID */
+ ds_file_group->stream = bt_stream_create_with_id(
+ ds_file_group->sc->ir_sc,
+ ctf_fs_trace->trace,
+ (uint64_t) ds_file_group->stream_id);
+ }
} else {
- /* Specific stream ID */
- ds_file_group->stream = bt_stream_create_with_id(
- ds_file_group->stream_class,
- ctf_fs_trace->trace,
- (uint64_t) ds_file_group->stream_id);
+ ds_file_group->stream = NULL;
}
if (!ds_file_group->stream) {
goto error;
}
- /*
- * create_ds_file_groups() created all the streams that this
- * trace needs. There won't be any more. Therefore it is safe to
- * make this trace static.
- */
- if (ctf_fs_trace->trace) {
- (void) bt_trace_make_static(ctf_fs_trace->trace);
- }
-
goto end;
error: