lib: make public reference count functions have strict types
[babeltrace.git] / plugins / ctf / fs-src / fs.c
index 3ace7653a7219370d0240988e56c3d68cd4ac303..abdf8e2b39a979b4247eb8406effb46c6847ef7b 100644 (file)
@@ -102,14 +102,14 @@ enum bt_self_notification_iterator_status ctf_fs_iterator_next_one(
 
        if (status == BT_SELF_NOTIFICATION_ITERATOR_STATUS_OK &&
                        bt_notification_get_type(*notif) ==
-                       BT_NOTIFICATION_TYPE_STREAM_BEGIN) {
+                       BT_NOTIFICATION_TYPE_STREAM_BEGINNING) {
                if (notif_iter_data->skip_stream_begin_notifs) {
                        /*
                         * We already emitted a
-                        * BT_NOTIFICATION_TYPE_STREAM_BEGIN
+                        * BT_NOTIFICATION_TYPE_STREAM_BEGINNING
                         * notification: skip this one, get a new one.
                         */
-                       BT_OBJECT_PUT_REF_AND_RESET(*notif);
+                       BT_NOTIFICATION_PUT_REF_AND_RESET(*notif);
                        status = ctf_fs_ds_file_next(notif_iter_data->ds_file,
                                &priv_notif);
                        *notif = priv_notif;
@@ -117,7 +117,7 @@ enum bt_self_notification_iterator_status ctf_fs_iterator_next_one(
                        goto end;
                } else {
                        /*
-                        * First BT_NOTIFICATION_TYPE_STREAM_BEGIN
+                        * First BT_NOTIFICATION_TYPE_STREAM_BEGINNING
                         * notification: skip all following.
                         */
                        notif_iter_data->skip_stream_begin_notifs = true;
@@ -144,7 +144,7 @@ enum bt_self_notification_iterator_status ctf_fs_iterator_next_one(
                        goto end;
                }
 
-               BT_OBJECT_PUT_REF_AND_RESET(*notif);
+               BT_NOTIFICATION_PUT_REF_AND_RESET(*notif);
                bt_notif_iter_reset(notif_iter_data->notif_iter);
 
                /*
@@ -162,15 +162,15 @@ enum bt_self_notification_iterator_status ctf_fs_iterator_next_one(
 
                /*
                 * If we get a notification, we expect to get a
-                * BT_NOTIFICATION_TYPE_STREAM_BEGIN notification
+                * BT_NOTIFICATION_TYPE_STREAM_BEGINNING notification
                 * because the iterator's state machine emits one before
                 * even requesting the first block of data from the
                 * medium. Skip this notification because we're not
                 * really starting a new stream here, and try getting a
                 * new notification (which, if it works, is a
-                * BT_NOTIFICATION_TYPE_PACKET_BEGIN one). We're sure to
+                * BT_NOTIFICATION_TYPE_PACKET_BEGINNING one). We're sure to
                 * get at least one pair of
-                * BT_NOTIFICATION_TYPE_PACKET_BEGIN and
+                * BT_NOTIFICATION_TYPE_PACKET_BEGINNING and
                 * BT_NOTIFICATION_TYPE_PACKET_END notifications in the
                 * case of a single, empty packet. We know there's at
                 * least one packet because the stream file group does
@@ -180,8 +180,8 @@ enum bt_self_notification_iterator_status ctf_fs_iterator_next_one(
 
                if (status == BT_SELF_NOTIFICATION_ITERATOR_STATUS_OK) {
                        BT_ASSERT(bt_notification_get_type(*notif) ==
-                               BT_NOTIFICATION_TYPE_STREAM_BEGIN);
-                       BT_OBJECT_PUT_REF_AND_RESET(*notif);
+                               BT_NOTIFICATION_TYPE_STREAM_BEGINNING);
+                       BT_NOTIFICATION_PUT_REF_AND_RESET(*notif);
                        status = ctf_fs_ds_file_next(notif_iter_data->ds_file,
                                &priv_notif);
                        *notif = priv_notif;
@@ -322,6 +322,8 @@ void ctf_fs_trace_destroy(struct ctf_fs_trace *ctf_fs_trace)
                g_ptr_array_free(ctf_fs_trace->ds_file_groups, TRUE);
        }
 
+       BT_TRACE_PUT_REF_AND_RESET(ctf_fs_trace->trace);
+
        if (ctf_fs_trace->path) {
                g_string_free(ctf_fs_trace->path, TRUE);
        }
@@ -510,8 +512,8 @@ void ctf_fs_ds_file_group_destroy(struct ctf_fs_ds_file_group *ds_file_group)
                g_ptr_array_free(ds_file_group->ds_file_infos, TRUE);
        }
 
-       bt_object_put_ref(ds_file_group->stream);
-       bt_object_put_ref(ds_file_group->stream_class);
+       bt_stream_put_ref(ds_file_group->stream);
+       bt_stream_class_put_ref(ds_file_group->stream_class);
        g_free(ds_file_group);
 }
 
@@ -537,7 +539,7 @@ struct ctf_fs_ds_file_group *ctf_fs_ds_file_group_create(
        ds_file_group->stream_id = stream_instance_id;
        BT_ASSERT(stream_class);
        ds_file_group->stream_class = stream_class;
-       bt_object_get_ref(ds_file_group->stream_class);
+       bt_stream_class_get_ref(ds_file_group->stream_class);
        ds_file_group->ctf_fs_trace = ctf_fs_trace;
        goto end;
 
@@ -861,12 +863,14 @@ int create_ds_file_groups(struct ctf_fs_trace *ctf_fs_trace)
                        /* 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++;
                } 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);
                }
 
@@ -909,6 +913,54 @@ end:
        return ret;
 }
 
+static
+int set_trace_name(struct bt_trace *trace, const char *name_suffix)
+{
+       int ret = 0;
+       const struct bt_trace_class *tc = bt_trace_borrow_class_const(trace);
+       const struct bt_value *val;
+       GString *name;
+
+       name = g_string_new(NULL);
+       if (!name) {
+               BT_LOGE_STR("Failed to allocate a GString.");
+               ret = -1;
+               goto end;
+       }
+
+       /*
+        * Check if we have a trace environment string value named `hostname`.
+        * If so, use it as the trace name's prefix.
+        */
+       val = bt_trace_class_borrow_environment_entry_value_by_name_const(
+               tc, "hostname");
+       if (val && bt_value_is_string(val)) {
+               g_string_append(name, bt_value_string_get(val));
+
+               if (name_suffix) {
+                       g_string_append_c(name, G_DIR_SEPARATOR);
+               }
+       }
+
+       if (name_suffix) {
+               g_string_append(name, name_suffix);
+       }
+
+       ret = bt_trace_set_name(trace, name->str);
+       if (ret) {
+               goto end;
+       }
+
+       goto end;
+
+end:
+       if (name) {
+               g_string_free(name, TRUE);
+       }
+
+       return ret;
+}
+
 BT_HIDDEN
 struct ctf_fs_trace *ctf_fs_trace_create(const char *path, const char *name,
                struct ctf_fs_metadata_config *metadata_config)
@@ -943,7 +995,18 @@ struct ctf_fs_trace *ctf_fs_trace_create(const char *path, const char *name,
                goto error;
        }
 
-       ret = ctf_fs_metadata_set_trace(ctf_fs_trace, metadata_config);
+       ret = ctf_fs_metadata_set_trace_class(ctf_fs_trace, metadata_config);
+       if (ret) {
+               goto error;
+       }
+
+       ctf_fs_trace->trace =
+               bt_trace_create(ctf_fs_trace->metadata->trace_class);
+       if (!ctf_fs_trace->trace) {
+               goto error;
+       }
+
+       ret = set_trace_name(ctf_fs_trace->trace, name);
        if (ret) {
                goto error;
        }
@@ -958,7 +1021,7 @@ struct ctf_fs_trace *ctf_fs_trace_create(const char *path, const char *name,
         * trace needs. There won't be any more. Therefore it is safe to
         * make this trace static.
         */
-       (void) bt_trace_make_static(ctf_fs_trace->metadata->trace);
+       (void) bt_trace_make_static(ctf_fs_trace->trace);
 
        goto end;
 
This page took 0.031805 seconds and 4 git commands to generate.