lib: do not allow port to be removed when message iterators are active
[babeltrace.git] / lib / graph / component.c
index 81c573b16dd23d2f8449141c8f1ed415bb4c543c..841931270163110277f19d370c4cf727d35fdd95 100644 (file)
@@ -1,8 +1,7 @@
 /*
+ * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
  * Copyright 2015 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
- * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
- *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
@@ -25,6 +24,8 @@
 #define BT_LOG_TAG "COMP"
 #include <babeltrace/lib-logging-internal.h>
 
+#include <babeltrace/assert-internal.h>
+#include <babeltrace/assert-pre-internal.h>
 #include <babeltrace/graph/self-component.h>
 #include <babeltrace/graph/component-const.h>
 #include <babeltrace/graph/component-source-const.h>
 #include <babeltrace/graph/component-sink-internal.h>
 #include <babeltrace/graph/connection-internal.h>
 #include <babeltrace/graph/graph-internal.h>
-#include <babeltrace/graph/notification-iterator-internal.h>
+#include <babeltrace/graph/message-iterator-internal.h>
 #include <babeltrace/graph/port-internal.h>
 #include <babeltrace/babeltrace-internal.h>
 #include <babeltrace/compiler-internal.h>
-#include <babeltrace/object.h>
 #include <babeltrace/types.h>
 #include <babeltrace/value.h>
 #include <babeltrace/value-internal.h>
-#include <babeltrace/assert-internal.h>
-#include <babeltrace/assert-pre-internal.h>
 #include <stdint.h>
 #include <inttypes.h>
 
@@ -269,7 +267,6 @@ int bt_component_create(struct bt_component_class *component_class,
        BT_ASSERT(user_component);
        BT_ASSERT(component_class);
        BT_ASSERT(name);
-
        type = bt_component_class_get_type(component_class);
        BT_LIB_LOGD("Creating empty component from component class: %![cc-]+C, "
                "comp-name=\"%s\"", component_class, name);
@@ -280,8 +277,7 @@ int bt_component_create(struct bt_component_class *component_class,
                goto end;
        }
 
-       bt_object_init_shared_with_parent(&component->base,
-               destroy_component);
+       bt_object_init_shared_with_parent(&component->base, destroy_component);
        component->class = component_class;
        bt_object_get_no_null_check(component->class);
        component->destroy = component_destroy_funcs[type];
@@ -485,7 +481,7 @@ void remove_port_by_index(struct bt_component *component,
         * below (in which its component is `NULL` as expected because
         * of the bt_object_set_parent() call below).
         *
-        * To avoid a destroyed port during the notification callback,
+        * To avoid a destroyed port during the message callback,
         * get a reference now, and put it (destroying the port if its
         * reference count is 0 at this point) after notifying the
         * graph's user.
@@ -549,8 +545,7 @@ void bt_component_remove_port(struct bt_component *component,
                struct bt_port *cur_port = g_ptr_array_index(ports, i);
 
                if (cur_port == port) {
-                       remove_port_by_index(component,
-                               ports, i);
+                       remove_port_by_index(component, ports, i);
                        goto end;
                }
        }
@@ -823,3 +818,13 @@ void bt_component_remove_destroy_listener(struct bt_component *component,
                }
        }
 }
+
+void bt_component_get_ref(const struct bt_component *component)
+{
+       bt_object_get_ref(component);
+}
+
+void bt_component_put_ref(const struct bt_component *component)
+{
+       bt_object_put_ref(component);
+}
This page took 0.025093 seconds and 4 git commands to generate.