X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=src%2Flib%2Fgraph%2Fgraph.h;h=4e500d49002417b44854a324134c1e8b2f90f698;hb=9b4f9b425f2efce9a6ccc25f7ae062ebc1116a7d;hp=30d59fb9d7e40eac63634884d7f8a7df8f21b956;hpb=d24d56638469189904fb6ddbb3c725817b3e9417;p=babeltrace.git diff --git a/src/lib/graph/graph.h b/src/lib/graph/graph.h index 30d59fb9..4e500d49 100644 --- a/src/lib/graph/graph.h +++ b/src/lib/graph/graph.h @@ -24,6 +24,11 @@ * SOFTWARE. */ +/* Protection: this file uses BT_LIB_LOG*() macros directly */ +#ifndef BT_LIB_LOG_SUPPORTED +# error Please include "lib/logging.h" before including this file. +#endif + #include #include #include "common/macros.h" @@ -62,6 +67,7 @@ enum bt_graph_configuration_state { BT_GRAPH_CONFIGURATION_STATE_PARTIALLY_CONFIGURED, BT_GRAPH_CONFIGURATION_STATE_CONFIGURED, BT_GRAPH_CONFIGURATION_STATE_FAULTY, + BT_GRAPH_CONFIGURATION_STATE_DESTROYING, }; struct bt_graph { @@ -84,7 +90,19 @@ struct bt_graph { /* Queue of pointers (weak references) to sink bt_components. */ GQueue *sinks_to_consume; - bool canceled; + /* + * Array of `struct bt_interrupter *`, each one owned by this. + * If any interrupter is set, then this graph is deemed + * interrupted. + */ + GPtrArray *interrupters; + + /* + * Default interrupter to support bt_graph_interrupt(); owned + * by this. + */ + struct bt_interrupter *default_interrupter; + bool in_remove_listener; bool has_sink; @@ -140,18 +158,12 @@ struct bt_graph { }; static inline -void _bt_graph_set_can_consume(struct bt_graph *graph, bool can_consume) +void bt_graph_set_can_consume(struct bt_graph *graph, bool can_consume) { BT_ASSERT(graph); graph->can_consume = can_consume; } -#ifdef BT_DEV_MODE -# define bt_graph_set_can_consume _bt_graph_set_can_consume -#else -# define bt_graph_set_can_consume(_graph, _can_consume) -#endif - BT_HIDDEN int bt_graph_consume_sink_no_check(struct bt_graph *graph, struct bt_component_sink *sink); @@ -185,6 +197,9 @@ BT_HIDDEN void bt_graph_add_message(struct bt_graph *graph, struct bt_message *msg); +BT_HIDDEN +bool bt_graph_is_interrupted(const struct bt_graph *graph); + static inline const char *bt_graph_configuration_state_string( enum bt_graph_configuration_state state) @@ -246,13 +261,18 @@ int bt_graph_configure(struct bt_graph *graph) comp_status == BT_FUNC_STATUS_MEMORY_ERROR, "Unexpected returned status: status=%s", bt_common_func_status_string(comp_status)); - if (comp_status != BT_FUNC_STATUS_OK) { - status = BT_FUNC_STATUS_ERROR; - BT_LIB_LOGW("User's \"graph is configured\" method failed: " - "%![comp-]+c, status=%s", - comp, bt_common_func_status_string( - comp_status)); + comp_status = BT_FUNC_STATUS_ERROR; + if (comp_status < 0) { + BT_LIB_LOGW_APPEND_CAUSE( + "Component's \"graph is configured\" method failed: " + "%![comp-]+c, status=%s", + comp, + bt_common_func_status_string( + comp_status)); + } + + status = comp_status; goto end; } }