lib: simplify the public notification iterator interfaces
[babeltrace.git] / plugins / utils / muxer / muxer.c
index a13de5303c3bc076b39ec4bfc73ef3454e5b8292..61cd4883319ff3332037d844df015e75d93fada7 100644 (file)
@@ -61,6 +61,9 @@ struct muxer_upstream_notif_iter {
        /* Owned by this, NULL if ended */
        struct bt_notification_iterator *notif_iter;
 
+       /* Owned by this */
+       struct bt_notification *notif;
+
        /*
         * This flag is true if the upstream notification iterator's
         * current notification must be considered for the multiplexing
@@ -135,6 +138,7 @@ void destroy_muxer_upstream_notif_iter(
                muxer_upstream_notif_iter->notif_iter,
                muxer_upstream_notif_iter->is_valid);
        bt_put(muxer_upstream_notif_iter->notif_iter);
+       bt_put(muxer_upstream_notif_iter->notif);
        g_free(muxer_upstream_notif_iter);
 }
 
@@ -291,7 +295,7 @@ int configure_muxer_comp(struct muxer_comp *muxer_comp, struct bt_value *params)
                goto error;
        }
 
-       assume_absolute_clock_classes = bt_value_map_get(real_params,
+       assume_absolute_clock_classes = bt_value_map_borrow(real_params,
                ASSUME_ABSOLUTE_CLOCK_CLASSES_PARAM_NAME);
        if (assume_absolute_clock_classes &&
                        !bt_value_is_bool(assume_absolute_clock_classes)) {
@@ -317,7 +321,6 @@ error:
 end:
        bt_put(default_params);
        bt_put(real_params);
-       bt_put(assume_absolute_clock_classes);
        return ret;
 }
 
@@ -407,7 +410,7 @@ static
 struct bt_notification_iterator *create_notif_iter_on_input_port(
                struct bt_private_port *priv_port, int *ret)
 {
-       struct bt_port *port = bt_port_from_private(priv_port);
+       struct bt_port *port = bt_port_borrow_from_private(priv_port);
        struct bt_notification_iterator *notif_iter = NULL;
        struct bt_private_connection *priv_conn = NULL;
        enum bt_connection_status conn_status;
@@ -423,7 +426,7 @@ struct bt_notification_iterator *create_notif_iter_on_input_port(
        //       returned notification by the muxer notification
        //       iterator which creates it.
        conn_status = bt_private_connection_create_notification_iterator(
-               priv_conn, NULL, &notif_iter);
+               priv_conn, &notif_iter);
        if (conn_status != BT_CONNECTION_STATUS_OK) {
                BT_LOGE("Cannot create upstream notification iterator on input port's connection: "
                        "port-addr=%p, port-name=\"%s\", conn-addr=%p, "
@@ -440,7 +443,6 @@ struct bt_notification_iterator *create_notif_iter_on_input_port(
                port, bt_port_get_name(port), priv_conn, notif_iter);
 
 end:
-       bt_put(port);
        bt_put(priv_conn);
        return notif_iter;
 }
@@ -450,13 +452,14 @@ enum bt_notification_iterator_status muxer_upstream_notif_iter_next(
                struct muxer_upstream_notif_iter *muxer_upstream_notif_iter)
 {
        enum bt_notification_iterator_status status;
+       struct bt_notification *notif = NULL;
 
        BT_LOGV("Calling upstream notification iterator's \"next\" method: "
                "muxer-upstream-notif-iter-wrap-addr=%p, notif-iter-addr=%p",
                muxer_upstream_notif_iter,
                muxer_upstream_notif_iter->notif_iter);
-       status = bt_notification_iterator_next(
-               muxer_upstream_notif_iter->notif_iter);
+       status = bt_private_connection_notification_iterator_next(
+               muxer_upstream_notif_iter->notif_iter, &notif);
        BT_LOGV("Upstream notification iterator's \"next\" method returned: "
                "status=%s", bt_notification_iterator_status_string(status));
 
@@ -468,6 +471,7 @@ enum bt_notification_iterator_status muxer_upstream_notif_iter_next(
                 */
                BT_LOGV_STR("Validated upstream notification iterator wrapper.");
                muxer_upstream_notif_iter->is_valid = true;
+               BT_MOVE(muxer_upstream_notif_iter->notif, notif);
                break;
        case BT_NOTIFICATION_ITERATOR_STATUS_AGAIN:
                /*
@@ -499,6 +503,7 @@ enum bt_notification_iterator_status muxer_upstream_notif_iter_next(
                break;
        }
 
+       BT_ASSERT(!notif);
        return status;
 }
 
@@ -531,7 +536,7 @@ int muxer_notif_iter_handle_newly_connected_ports(
                }
 
                priv_port = node->data;
-               port = bt_port_from_private(priv_port);
+               port = bt_port_borrow_from_private(priv_port);
                BT_ASSERT(port);
 
                if (!bt_port_is_connected(port)) {
@@ -544,7 +549,6 @@ int muxer_notif_iter_handle_newly_connected_ports(
                        goto remove_node;
                }
 
-               BT_PUT(port);
                upstream_notif_iter = create_notif_iter_on_input_port(priv_port,
                        &ret);
                if (ret) {
@@ -568,7 +572,6 @@ int muxer_notif_iter_handle_newly_connected_ports(
 
 remove_node:
                bt_put(upstream_notif_iter);
-               bt_put(port);
                muxer_notif_iter->newly_connected_priv_ports =
                        g_list_delete_link(
                                muxer_notif_iter->newly_connected_priv_ports,
@@ -611,13 +614,13 @@ int get_notif_ts_ns(struct muxer_comp *muxer_comp,
        switch (bt_notification_get_type(notif)) {
        case BT_NOTIFICATION_TYPE_EVENT:
                cc_prio_map =
-                       bt_notification_event_get_clock_class_priority_map(
+                       bt_notification_event_borrow_clock_class_priority_map(
                                notif);
                break;
 
        case BT_NOTIFICATION_TYPE_INACTIVITY:
                cc_prio_map =
-                       bt_notification_inactivity_get_clock_class_priority_map(
+                       bt_notification_inactivity_borrow_clock_class_priority_map(
                                notif);
                break;
        default:
@@ -646,7 +649,7 @@ int get_notif_ts_ns(struct muxer_comp *muxer_comp,
        }
 
        clock_class =
-               bt_clock_class_priority_map_get_highest_priority_clock_class(
+               bt_clock_class_priority_map_borrow_highest_priority_clock_class(
                        cc_prio_map);
        if (!clock_class) {
                BT_LOGE("Cannot get the clock class with the highest priority from clock class priority map: "
@@ -807,13 +810,13 @@ int get_notif_ts_ns(struct muxer_comp *muxer_comp,
 
        switch (bt_notification_get_type(notif)) {
        case BT_NOTIFICATION_TYPE_EVENT:
-               event = bt_notification_event_get_event(notif);
+               event = bt_notification_event_borrow_event(notif);
                BT_ASSERT(event);
-               clock_value = bt_event_get_clock_value(event,
+               clock_value = bt_event_borrow_clock_value(event,
                        clock_class);
                break;
        case BT_NOTIFICATION_TYPE_INACTIVITY:
-               clock_value = bt_notification_inactivity_get_clock_value(
+               clock_value = bt_notification_inactivity_borrow_clock_value(
                        notif, clock_class);
                break;
        default:
@@ -850,10 +853,6 @@ end:
                        *ts_ns);
        }
 
-       bt_put(cc_prio_map);
-       bt_put(event);
-       bt_put(clock_class);
-       bt_put(clock_value);
        return ret;
 }
 
@@ -908,12 +907,10 @@ muxer_notif_iter_youngest_upstream_notif_iter(
                }
 
                BT_ASSERT(cur_muxer_upstream_notif_iter->is_valid);
-               notif = bt_notification_iterator_get_notification(
-                       cur_muxer_upstream_notif_iter->notif_iter);
+               notif = cur_muxer_upstream_notif_iter->notif;
                BT_ASSERT(notif);
                ret = get_notif_ts_ns(muxer_comp, muxer_notif_iter, notif,
                        muxer_notif_iter->last_returned_ts_ns, &notif_ts_ns);
-               bt_put(notif);
                if (ret) {
                        /* get_notif_ts_ns() logs errors */
                        *muxer_upstream_notif_iter = NULL;
@@ -1115,8 +1112,7 @@ struct bt_notification_iterator_next_method_return muxer_notif_iter_do_next(
                muxer_notif_iter, muxer_upstream_notif_iter, next_return_ts);
        BT_ASSERT(next_return.status == BT_NOTIFICATION_ITERATOR_STATUS_OK);
        BT_ASSERT(muxer_upstream_notif_iter);
-       next_return.notification = bt_notification_iterator_get_notification(
-               muxer_upstream_notif_iter->notif_iter);
+       next_return.notification = bt_get(muxer_upstream_notif_iter->notif);
        BT_ASSERT(next_return.notification);
 
        /*
@@ -1165,7 +1161,7 @@ int muxer_notif_iter_init_newly_connected_ports(struct muxer_comp *muxer_comp,
         * iterator's list of newly connected ports. They will be
         * handled by muxer_notif_iter_handle_newly_connected_ports().
         */
-       comp = bt_component_from_private(muxer_comp->priv_comp);
+       comp = bt_component_borrow_from_private(muxer_comp->priv_comp);
        BT_ASSERT(comp);
        count = bt_component_filter_get_input_port_count(comp);
        if (count < 0) {
@@ -1182,7 +1178,7 @@ int muxer_notif_iter_init_newly_connected_ports(struct muxer_comp *muxer_comp,
                struct bt_port *port;
 
                BT_ASSERT(priv_port);
-               port = bt_port_from_private(priv_port);
+               port = bt_port_borrow_from_private(priv_port);
                BT_ASSERT(port);
 
                if (!bt_port_is_connected(port)) {
@@ -1190,11 +1186,9 @@ int muxer_notif_iter_init_newly_connected_ports(struct muxer_comp *muxer_comp,
                                "muxer-comp-addr=%p, port-addr=%p, port-name\"%s\"",
                                muxer_comp, port, bt_port_get_name(port));
                        bt_put(priv_port);
-                       bt_put(port);
                        continue;
                }
 
-               bt_put(port);
                bt_put(priv_port);
                muxer_notif_iter->newly_connected_priv_ports =
                        g_list_append(
@@ -1216,7 +1210,6 @@ int muxer_notif_iter_init_newly_connected_ports(struct muxer_comp *muxer_comp,
        }
 
 end:
-       bt_put(comp);
        return ret;
 }
 
@@ -1403,7 +1396,7 @@ void muxer_port_connected(
                struct bt_port *other_port)
 {
        struct bt_port *self_port =
-               bt_port_from_private(self_private_port);
+               bt_port_borrow_from_private(self_private_port);
        struct muxer_comp *muxer_comp =
                bt_private_component_get_user_data(priv_comp);
        size_t i;
@@ -1468,14 +1461,14 @@ void muxer_port_connected(
        }
 
 end:
-       bt_put(self_port);
+       return;
 }
 
 BT_HIDDEN
 void muxer_port_disconnected(struct bt_private_component *priv_comp,
                struct bt_private_port *priv_port)
 {
-       struct bt_port *port = bt_port_from_private(priv_port);
+       struct bt_port *port = bt_port_borrow_from_private(priv_port);
        struct muxer_comp *muxer_comp =
                bt_private_component_get_user_data(priv_comp);
 
@@ -1506,6 +1499,4 @@ void muxer_port_disconnected(struct bt_private_component *priv_comp,
                        priv_comp, muxer_comp, port, bt_port_get_name(port),
                        muxer_comp->available_input_ports);
        }
-
-       bt_put(port);
 }
This page took 0.031681 seconds and 4 git commands to generate.