X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer%2Fconsumer.c;h=32a2d7a4a08c36f1aad2665172a8014b2c4122b0;hb=3654ed19aa453f4be063784e215cab81441e8962;hp=c70d95a58bfc91a3a053c1d160be6ec1f8a0bba6;hpb=ea6bf30f3684cf71633cb9f2c70ea0bc22b664c4;p=lttng-tools.git diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index c70d95a58..32a2d7a4a 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -393,6 +393,10 @@ void consumer_del_channel(struct lttng_consumer_channel *channel) iter.iter.node = &channel->node.node; ret = lttng_ht_del(consumer_data.channel_ht, &iter); assert(!ret); + + iter.iter.node = &channel->channels_by_session_id_ht_node.node; + ret = lttng_ht_del(consumer_data.channels_by_session_id_ht, &iter); + assert(!ret); rcu_read_unlock(); call_rcu(&channel->node.head, free_channel_rcu); @@ -1035,6 +1039,8 @@ struct lttng_consumer_channel *consumer_allocate_channel(uint64_t key, } lttng_ht_node_init_u64(&channel->node, channel->key); + lttng_ht_node_init_u64(&channel->channels_by_session_id_ht_node, + channel->session_id); channel->wait_fd = -1; @@ -1067,6 +1073,8 @@ int consumer_add_channel(struct lttng_consumer_channel *channel, rcu_read_lock(); lttng_ht_add_unique_u64(consumer_data.channel_ht, &channel->node); + lttng_ht_add_u64(consumer_data.channels_by_session_id_ht, + &channel->channels_by_session_id_ht_node); rcu_read_unlock(); pthread_mutex_unlock(&channel->timer_lock); @@ -1225,6 +1233,7 @@ void lttng_consumer_cleanup(void) rcu_read_unlock(); lttng_ht_destroy(consumer_data.channel_ht); + lttng_ht_destroy(consumer_data.channels_by_session_id_ht); cleanup_relayd_ht(); @@ -1236,6 +1245,8 @@ void lttng_consumer_cleanup(void) * it. */ lttng_ht_destroy(consumer_data.stream_list_ht); + + lttng_trace_chunk_registry_destroy(consumer_data.chunk_registry); } /* @@ -3423,6 +3434,12 @@ int lttng_consumer_init(void) goto error; } + consumer_data.channels_by_session_id_ht = + lttng_ht_new(0, LTTNG_HT_TYPE_U64); + if (!consumer_data.channels_by_session_id_ht) { + goto error; + } + consumer_data.relayd_ht = lttng_ht_new(0, LTTNG_HT_TYPE_U64); if (!consumer_data.relayd_ht) { goto error; @@ -3448,6 +3465,11 @@ int lttng_consumer_init(void) goto error; } + consumer_data.chunk_registry = lttng_trace_chunk_registry_create(); + if (!consumer_data.chunk_registry) { + goto error; + } + return 0; error: @@ -4463,3 +4485,21 @@ int lttng_consumer_mkdir(const char *path, uid_t uid, gid_t gid, return mkdir_local(path, uid, gid); } } + +enum lttcomm_return_code lttng_consumer_init_command( + struct lttng_consumer_local_data *ctx, + const lttng_uuid sessiond_uuid) +{ + enum lttcomm_return_code ret; + + if (ctx->sessiond_uuid.is_set) { + ret = LTTCOMM_CONSUMERD_ALREADY_SET; + goto end; + } + + ctx->sessiond_uuid.is_set = true; + memcpy(ctx->sessiond_uuid.value, sessiond_uuid, sizeof(lttng_uuid)); + ret = LTTCOMM_CONSUMERD_SUCCESS; +end: + return ret; +}