*/
#define BT_LOG_TAG "CONNECTION"
-#include <babeltrace/lib-logging-internal.h>
-
-#include <babeltrace/graph/notification-iterator-internal.h>
-#include <babeltrace/graph/component-internal.h>
-#include <babeltrace/graph/connection-internal.h>
-#include <babeltrace/graph/connection-const.h>
-#include <babeltrace/graph/graph-internal.h>
-#include <babeltrace/graph/port-internal.h>
-#include <babeltrace/object-internal.h>
-#include <babeltrace/compiler-internal.h>
-#include <babeltrace/object.h>
-#include <babeltrace/assert-internal.h>
-#include <babeltrace/assert-pre-internal.h>
+#include <babeltrace2/lib-logging-internal.h>
+
+#include <babeltrace2/assert-internal.h>
+#include <babeltrace2/assert-pre-internal.h>
+#include <babeltrace2/graph/message-iterator-internal.h>
+#include <babeltrace2/graph/component-internal.h>
+#include <babeltrace2/graph/connection-internal.h>
+#include <babeltrace2/graph/connection-const.h>
+#include <babeltrace2/graph/graph-internal.h>
+#include <babeltrace2/graph/port-internal.h>
+#include <babeltrace2/object-internal.h>
+#include <babeltrace2/compiler-internal.h>
#include <stdlib.h>
#include <glib.h>
BT_LIB_LOGD("Destroying connection: %!+x", connection);
/*
- * Make sure that each notification iterator which was created
- * for this connection is finalized before we destroy it. Once a
- * notification iterator is finalized, all its method return
- * NULL or the BT_NOTIFICATION_ITERATOR_STATUS_CANCELED status.
+ * Make sure that each message iterator which was created for
+ * this connection is finalized before we destroy it. Once a
+ * message iterator is finalized, all its method return NULL or
+ * the BT_MESSAGE_ITERATOR_STATUS_CANCELED status.
*
* Because connections are destroyed before components within a
- * graph, this ensures that notification iterators are always
+ * graph, this ensures that message iterators are always
* finalized before their upstream component.
*
* Ending the connection does exactly this. We pass `false` to
* At this point we know that:
*
* 1. The connection is ended (ports were disconnected).
- * 2. All the notification iterators that this connection
+ * 2. All the message iterators that this connection
* created, if any, are finalized.
* 3. The connection's reference count is 0, so only the
* parent (graph) owns this connection after this call.
BT_HIDDEN
void bt_connection_end(struct bt_connection *conn, bool try_remove_from_graph)
{
- struct bt_component *downstream_comp = NULL;
- struct bt_component *upstream_comp = NULL;
struct bt_port *downstream_port = conn->downstream_port;
struct bt_port *upstream_port = conn->upstream_port;
- struct bt_graph *graph = bt_connection_borrow_graph(conn);
size_t i;
BT_LIB_LOGD("Ending connection: %!+x, try-remove-from-graph=%d",
conn, try_remove_from_graph);
/*
- * Any of the following notification callback functions could
+ * Any of the following message callback functions could
* remove one of the connection's ports from its component. To
* make sure that at least logging in called functions works
* with existing objects, get a local reference on both ports.
if (downstream_port) {
BT_LIB_LOGD("Disconnecting connection's downstream port: %!+p",
downstream_port);
- downstream_comp = bt_port_borrow_component_inline(
- downstream_port);
bt_port_set_connection(downstream_port, NULL);
conn->downstream_port = NULL;
}
if (upstream_port) {
BT_LIB_LOGD("Disconnecting connection's upstream port: %!+p",
upstream_port);
- upstream_comp = bt_port_borrow_component_inline(
- upstream_port);
bt_port_set_connection(upstream_port, NULL);
conn->upstream_port = NULL;
}
- if (downstream_comp && conn->notified_downstream_port_connected &&
- !conn->notified_downstream_port_disconnected) {
- /* bt_component_port_disconnected() logs details */
- bt_component_port_disconnected(downstream_comp,
- downstream_port);
- conn->notified_downstream_port_disconnected = true;
- }
-
- if (upstream_comp && conn->notified_upstream_port_connected &&
- !conn->notified_upstream_port_disconnected) {
- /* bt_component_port_disconnected() logs details */
- bt_component_port_disconnected(upstream_comp, upstream_port);
- conn->notified_upstream_port_disconnected = true;
- }
-
- BT_ASSERT(graph);
-
- if (conn->notified_graph_ports_connected &&
- !conn->notified_graph_ports_disconnected) {
- /* bt_graph_notify_ports_disconnected() logs details */
- bt_graph_notify_ports_disconnected(graph, upstream_comp,
- downstream_comp, upstream_port, downstream_port);
- conn->notified_graph_ports_disconnected = true;
- }
-
/*
* It is safe to put the local port references now that we don't
* need them anymore. This could indeed destroy them.
bt_object_put_ref(upstream_port);
/*
- * Because this connection is ended, finalize (cancel) each
- * notification iterator created from it.
+ * Because this connection is ended, finalize each message
+ * iterator created from it.
+ *
+ * In practice, this only happens when the connection is
+ * destroyed and not all its message iterators were finalized,
+ * which is on graph destruction.
*/
for (i = 0; i < conn->iterators->len; i++) {
- struct bt_self_component_port_input_notification_iterator *iterator =
+ struct bt_self_component_port_input_message_iterator *iterator =
g_ptr_array_index(conn->iterators, i);
- BT_LIB_LOGD("Finalizing notification iterator created by "
+ BT_LIB_LOGD("Finalizing message iterator created by "
"this ended connection: %![iter-]+i", iterator);
- bt_self_component_port_input_notification_iterator_finalize(
+ bt_self_component_port_input_message_iterator_try_finalize(
iterator);
/*
* from this connection's iterators on destruction
* because this connection won't exist anymore.
*/
- bt_self_component_port_input_notification_iterator_set_connection(
+ bt_self_component_port_input_message_iterator_set_connection(
iterator, NULL);
}
BT_HIDDEN
void bt_connection_remove_iterator(struct bt_connection *conn,
- struct bt_self_component_port_input_notification_iterator *iterator)
+ struct bt_self_component_port_input_message_iterator *iterator)
{
g_ptr_array_remove(conn->iterators, iterator);
- BT_LIB_LOGV("Removed notification iterator from connection: "
+ BT_LIB_LOGV("Removed message iterator from connection: "
"%![conn-]+x, %![iter-]+i", conn, iterator);
try_remove_connection_from_graph(conn);
}
-bt_bool bt_connection_is_ended(const struct bt_connection *connection)
+void bt_connection_get_ref(const struct bt_connection *connection)
+{
+ bt_object_get_ref(connection);
+}
+
+void bt_connection_put_ref(const struct bt_connection *connection)
{
- return !connection->downstream_port && !connection->upstream_port;
+ bt_object_put_ref(connection);
}