X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Flttng-live%2Flttng-live.c;h=0e64f7d969ab89405cded2a0be1a0cea8261f23e;hb=4c66436f61db5fcb293f79313f78b6affc83666a;hp=3c5e04db79f9de1b3941ec262d1d4b7b7c3ca39f;hpb=047358f92e8cc77c6a387d1be8f0b51082255f91;p=babeltrace.git diff --git a/plugins/ctf/lttng-live/lttng-live.c b/plugins/ctf/lttng-live/lttng-live.c index 3c5e04db..0e64f7d9 100644 --- a/plugins/ctf/lttng-live/lttng-live.c +++ b/plugins/ctf/lttng-live/lttng-live.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -164,10 +165,15 @@ static void lttng_live_destroy_trace(struct bt_object *obj) { struct lttng_live_trace *trace = container_of(obj, struct lttng_live_trace, obj); + int retval; BT_LOGI("Destroy trace"); assert(bt_list_empty(&trace->streams)); bt_list_del(&trace->node); + + retval = bt_ctf_trace_set_is_static(trace->trace); + assert(!retval); + lttng_live_metadata_fini(trace); BT_PUT(trace->cc_prio_map); g_free(trace); @@ -264,9 +270,11 @@ void lttng_live_destroy_session(struct lttng_live_session *session) BT_LOGI("Destroy session"); if (session->id != -1ULL) { if (lttng_live_detach_session(session)) { - /* Old relayd cannot detach sessions. */ - BT_LOGD("Unable to detach session %" PRIu64, - session->id); + if (!bt_graph_is_canceled(session->lttng_live->graph)) { + /* Old relayd cannot detach sessions. */ + BT_LOGD("Unable to detach session %" PRIu64, + session->id); + } } session->id = -1ULL; } @@ -396,7 +404,11 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_get_session( struct lttng_live_trace *trace, *t; if (lttng_live_attach_session(session)) { - return BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_ERROR; + if (bt_graph_is_canceled(lttng_live->graph)) { + return BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + } else { + return BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_ERROR; + } } status = lttng_live_get_new_streams(session); if (status != BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_OK && @@ -405,12 +417,8 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_get_session( } bt_list_for_each_entry_safe(trace, t, &session->traces, node) { status = lttng_live_metadata_update(trace); - if (status == BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_END) { - int retval; - - retval = bt_ctf_trace_set_is_static(trace->trace); - assert(!retval); - } else if (status != BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_OK) { + if (status != BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_OK && + status != BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_END) { return status; } } @@ -910,7 +918,7 @@ struct bt_value *lttng_live_query_list_sessions(struct bt_component_class *comp_ goto error; } - viewer_connection = bt_live_viewer_connection_create(url, stderr); + viewer_connection = bt_live_viewer_connection_create(url, NULL); if (!viewer_connection) { ret = BT_COMPONENT_STATUS_NOMEM; goto error; @@ -983,6 +991,7 @@ struct lttng_live_component *lttng_live_component_create(struct bt_value *params struct bt_value *value = NULL; const char *url; enum bt_value_status ret; + struct bt_component *component; lttng_live = g_new0(struct lttng_live_component, 1); if (!lttng_live) { @@ -1006,18 +1015,30 @@ struct lttng_live_component *lttng_live_component_create(struct bt_value *params goto error; } lttng_live->viewer_connection = - bt_live_viewer_connection_create(lttng_live->url->str, - stderr); + bt_live_viewer_connection_create(lttng_live->url->str, lttng_live); if (!lttng_live->viewer_connection) { - ret = BT_COMPONENT_STATUS_NOMEM; + if (bt_graph_is_canceled(lttng_live->graph)) { + ret = BT_COMPONENT_STATUS_AGAIN; + } else { + ret = BT_COMPONENT_STATUS_NOMEM; + } goto error; } if (lttng_live_create_viewer_session(lttng_live)) { - ret = BT_COMPONENT_STATUS_ERROR; + if (bt_graph_is_canceled(lttng_live->graph)) { + ret = BT_COMPONENT_STATUS_AGAIN; + } else { + ret = BT_COMPONENT_STATUS_NOMEM; + } goto error; } lttng_live->private_component = private_component; + component = bt_component_from_private_component(private_component); + lttng_live->graph = bt_component_get_graph(component); + bt_put(lttng_live->graph); /* weak */ + bt_put(component); + goto end; error: