X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Futils%2Fmuxer%2Fmuxer.c;h=a148ca41cbff6cf551c1ba491605b76814ee633a;hb=c3acd5f3f82ef06a3d04dc180c901a4597514d13;hp=67ba0a99421b805e61ff149c90115df30c60b50d;hpb=c55a9f585da53ea54ac458155fac3cdec1779d47;p=babeltrace.git diff --git a/plugins/utils/muxer/muxer.c b/plugins/utils/muxer/muxer.c index 67ba0a99..a148ca41 100644 --- a/plugins/utils/muxer/muxer.c +++ b/plugins/utils/muxer/muxer.c @@ -41,8 +41,9 @@ #include #include #include +#include -#define IGNORE_ABSOLUTE_PARAM_NAME "ignore-absolute" +#define ASSUME_ABSOLUTE_CLOCK_CLASSES_PARAM_NAME "assume-absolute-clock-classes" struct muxer_comp { /* Array of struct bt_private_notification_iterator * (weak refs) */ @@ -61,7 +62,7 @@ struct muxer_upstream_notif_iter { /* Owned by this, NULL if ended */ struct bt_notification_iterator *notif_iter; - /* Owned by this*/ + /* Weak */ struct bt_private_port *priv_port; /* @@ -90,7 +91,7 @@ struct muxer_notif_iter { GPtrArray *muxer_upstream_notif_iters; /* - * List of "recently" connected input ports (owned by this) to + * List of "recently" connected input ports (weak) to * handle by this muxer notification iterator. * muxer_port_connected() adds entries to this list, and the * entries are removed when a notification iterator is created @@ -116,7 +117,6 @@ void destroy_muxer_upstream_notif_iter( } bt_put(muxer_upstream_notif_iter->notif_iter); - bt_put(muxer_upstream_notif_iter->priv_port); g_free(muxer_upstream_notif_iter); } @@ -134,7 +134,7 @@ struct muxer_upstream_notif_iter *muxer_notif_iter_add_upstream_notif_iter( } muxer_upstream_notif_iter->notif_iter = bt_get(notif_iter); - muxer_upstream_notif_iter->priv_port = bt_get(priv_port); + muxer_upstream_notif_iter->priv_port = priv_port; muxer_upstream_notif_iter->is_valid = false; g_ptr_array_add(muxer_notif_iter->muxer_upstream_notif_iters, muxer_upstream_notif_iter); @@ -180,7 +180,7 @@ end: g_string_free(port_name, TRUE); } - BT_PUT(priv_port); + bt_put(priv_port); return ret; } @@ -225,8 +225,8 @@ struct bt_value *get_default_params(void) goto error; } - ret = bt_value_map_insert_bool(params, IGNORE_ABSOLUTE_PARAM_NAME, - false); + ret = bt_value_map_insert_bool(params, + ASSUME_ABSOLUTE_CLOCK_CLASSES_PARAM_NAME, false); if (ret) { goto error; } @@ -260,7 +260,7 @@ int configure_muxer_comp(struct muxer_comp *muxer_comp, struct bt_value *params) } ignore_absolute = bt_value_map_get(real_params, - IGNORE_ABSOLUTE_PARAM_NAME); + ASSUME_ABSOLUTE_CLOCK_CLASSES_PARAM_NAME); if (!bt_value_is_bool(ignore_absolute)) { goto error; } @@ -401,7 +401,8 @@ enum bt_notification_iterator_status muxer_upstream_notif_iter_next( */ muxer_upstream_notif_iter->is_valid = false; break; - case BT_NOTIFICATION_ITERATOR_STATUS_END: + case BT_NOTIFICATION_ITERATOR_STATUS_END: /* Fall-through. */ + case BT_NOTIFICATION_ITERATOR_STATUS_CANCELED: /* * Notification iterator reached the end: release it. It * won't be considered again to find the youngest @@ -464,7 +465,6 @@ int muxer_notif_iter_handle_newly_connected_ports( &ret); if (ret) { assert(!upstream_notif_iter); - bt_put(priv_port); goto error; } @@ -472,7 +472,6 @@ int muxer_notif_iter_handle_newly_connected_ports( muxer_notif_iter_add_upstream_notif_iter( muxer_notif_iter, upstream_notif_iter, priv_port); - BT_PUT(priv_port); BT_PUT(upstream_notif_iter); if (!muxer_upstream_notif_iter) { goto error; @@ -481,7 +480,6 @@ int muxer_notif_iter_handle_newly_connected_ports( remove_node: bt_put(upstream_notif_iter); bt_put(port); - bt_put(priv_port); muxer_notif_iter->newly_connected_priv_ports = g_list_delete_link( muxer_notif_iter->newly_connected_priv_ports, @@ -569,7 +567,7 @@ int get_notif_ts_ns(struct muxer_comp *muxer_comp, notif, clock_class); break; default: - assert(false); + abort(); } if (!clock_value) { @@ -768,7 +766,8 @@ struct bt_notification_iterator_next_return muxer_notif_iter_do_next( muxer_notif_iter, &muxer_upstream_notif_iter, &next_return_ts); if (next_return.status < 0 || - next_return.status == BT_NOTIFICATION_ITERATOR_STATUS_END) { + next_return.status == BT_NOTIFICATION_ITERATOR_STATUS_END || + next_return.status == BT_NOTIFICATION_ITERATOR_STATUS_CANCELED) { goto end; } @@ -798,8 +797,6 @@ end: static void destroy_muxer_notif_iter(struct muxer_notif_iter *muxer_notif_iter) { - GList *node; - if (!muxer_notif_iter) { return; } @@ -809,11 +806,6 @@ void destroy_muxer_notif_iter(struct muxer_notif_iter *muxer_notif_iter) muxer_notif_iter->muxer_upstream_notif_iters, TRUE); } - for (node = muxer_notif_iter->newly_connected_priv_ports; - node; node = g_list_next(node)) { - bt_put(node->data); - } - g_list_free(muxer_notif_iter->newly_connected_priv_ports); g_free(muxer_notif_iter); } @@ -856,12 +848,12 @@ int muxer_notif_iter_init_newly_connected_ports(struct muxer_comp *muxer_comp, } bt_put(port); + bt_put(priv_port); muxer_notif_iter->newly_connected_priv_ports = g_list_append( muxer_notif_iter->newly_connected_priv_ports, priv_port); if (!muxer_notif_iter->newly_connected_priv_ports) { - bt_put(priv_port); ret = -1; goto end; } @@ -1017,24 +1009,13 @@ void muxer_port_connected( struct muxer_comp *muxer_comp = bt_private_component_get_user_data(priv_comp); size_t i; + int ret; assert(self_port); assert(muxer_comp); - if (bt_port_get_type(self_port) == BT_PORT_TYPE_INPUT) { - int ret; - - /* One less available input port */ - muxer_comp->available_input_ports--; - ret = ensure_available_input_port(priv_comp); - if (ret) { - /* - * Only way to report an error later since this - * method does not return anything. - */ - muxer_comp->error = true; - goto end; - } + if (bt_port_get_type(self_port) == BT_PORT_TYPE_OUTPUT) { + goto end; } for (i = 0; i < muxer_comp->muxer_notif_iters->len; i++) { @@ -1053,15 +1034,26 @@ void muxer_port_connected( muxer_notif_iter->newly_connected_priv_ports = g_list_append( muxer_notif_iter->newly_connected_priv_ports, - bt_get(self_private_port)); + self_private_port); if (!muxer_notif_iter->newly_connected_priv_ports) { /* Put reference taken by bt_get() above */ - bt_put(self_private_port); muxer_comp->error = true; goto end; } } + /* One less available input port */ + muxer_comp->available_input_ports--; + ret = ensure_available_input_port(priv_comp); + if (ret) { + /* + * Only way to report an error later since this + * method does not return anything. + */ + muxer_comp->error = true; + goto end; + } + end: bt_put(self_port); }