X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fust-consumer%2Fust-consumer.c;h=aede53658736e2037d8f90bb53b050c4bb2c2997;hp=5f1f93b0e1024c6c1eee422d80930b71ccaaf1a8;hb=b7fc068d873bcfc93761f418bfefe8c928c33a59;hpb=b1316da1ffbd276fc8271e7a9438e683ad352781 diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c index 5f1f93b0e..aede53658 100644 --- a/src/common/ust-consumer/ust-consumer.c +++ b/src/common/ust-consumer/ust-consumer.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include "ust-consumer.h" @@ -352,48 +353,6 @@ error_alloc: return ret; } -/* - * create_posix_shm is never called concurrently within a process. - */ -static -int create_posix_shm(void) -{ - char tmp_name[NAME_MAX]; - int shmfd, ret; - - ret = snprintf(tmp_name, NAME_MAX, "/ust-shm-consumer-%d", getpid()); - if (ret < 0) { - PERROR("snprintf"); - return -1; - } - /* - * Allocate shm, and immediately unlink its shm oject, keeping - * only the file descriptor as a reference to the object. - * We specifically do _not_ use the / at the beginning of the - * pathname so that some OS implementations can keep it local to - * the process (POSIX leaves this implementation-defined). - */ - shmfd = shm_open(tmp_name, O_CREAT | O_EXCL | O_RDWR, 0700); - if (shmfd < 0) { - PERROR("shm_open"); - goto error_shm_open; - } - ret = shm_unlink(tmp_name); - if (ret < 0 && errno != ENOENT) { - PERROR("shm_unlink"); - goto error_shm_release; - } - return shmfd; - -error_shm_release: - ret = close(shmfd); - if (ret) { - PERROR("close"); - } -error_shm_open: - return -1; -} - static int open_ust_stream_fd(struct lttng_consumer_channel *channel, int cpu, const struct lttng_credentials *session_credentials) { @@ -401,7 +360,7 @@ static int open_ust_stream_fd(struct lttng_consumer_channel *channel, int cpu, int ret; if (!channel->shm_path[0]) { - return create_posix_shm(); + return shm_create_anonymous("ust-consumer"); } ret = get_stream_shm_path(shm_path, channel->shm_path, cpu); if (ret) { @@ -1333,7 +1292,8 @@ int lttng_ustconsumer_recv_metadata(int sock, uint64_t key, uint64_t offset, pthread_mutex_lock(&channel->metadata_cache->lock); cache_write_status = consumer_metadata_cache_write( - channel, offset, len, version, metadata_str); + channel->metadata_cache, offset, len, version, + metadata_str); pthread_mutex_unlock(&channel->metadata_cache->lock); switch (cache_write_status) { case CONSUMER_METADATA_CACHE_WRITE_STATUS_NO_CHANGE: @@ -1559,15 +1519,15 @@ int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx, switch (msg.u.ask_channel.output) { case LTTNG_EVENT_MMAP: default: - attr.output = LTTNG_UST_MMAP; + attr.output = LTTNG_UST_ABI_MMAP; break; } /* Translate and save channel type. */ switch (msg.u.ask_channel.type) { - case LTTNG_UST_CHAN_PER_CPU: + case LTTNG_UST_ABI_CHAN_PER_CPU: channel->type = CONSUMER_CHANNEL_TYPE_DATA; - attr.type = LTTNG_UST_CHAN_PER_CPU; + attr.type = LTTNG_UST_ABI_CHAN_PER_CPU; /* * Set refcount to 1 for owner. Below, we will * pass ownership to the @@ -1575,9 +1535,9 @@ int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx, */ channel->refcount = 1; break; - case LTTNG_UST_CHAN_METADATA: + case LTTNG_UST_ABI_CHAN_METADATA: channel->type = CONSUMER_CHANNEL_TYPE_METADATA; - attr.type = LTTNG_UST_CHAN_METADATA; + attr.type = LTTNG_UST_ABI_CHAN_METADATA; break; default: assert(0); @@ -1591,7 +1551,7 @@ int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx, goto end_channel_error; } - if (msg.u.ask_channel.type == LTTNG_UST_CHAN_METADATA) { + if (msg.u.ask_channel.type == LTTNG_UST_ABI_CHAN_METADATA) { ret = consumer_metadata_cache_allocate(channel); if (ret < 0) { ERR("Allocating metadata cache"); @@ -1624,7 +1584,7 @@ int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx, */ ret = add_channel(channel, ctx); if (ret < 0) { - if (msg.u.ask_channel.type == LTTNG_UST_CHAN_METADATA) { + if (msg.u.ask_channel.type == LTTNG_UST_ABI_CHAN_METADATA) { if (channel->switch_timer_enabled == 1) { consumer_timer_switch_stop(channel); } @@ -2521,8 +2481,8 @@ int commit_one_metadata_packet(struct lttng_consumer_stream *stream) int ret; pthread_mutex_lock(&stream->chan->metadata_cache->lock); - if (stream->chan->metadata_cache->max_offset == - stream->ust_metadata_pushed) { + if (stream->chan->metadata_cache->contents.size == + stream->ust_metadata_pushed) { /* * In the context of a user space metadata channel, a * change in version can be detected in two ways: @@ -2559,9 +2519,9 @@ int commit_one_metadata_packet(struct lttng_consumer_stream *stream) } write_len = ustctl_write_one_packet_to_channel(stream->chan->uchan, - &stream->chan->metadata_cache->data[stream->ust_metadata_pushed], - stream->chan->metadata_cache->max_offset - - stream->ust_metadata_pushed); + &stream->chan->metadata_cache->contents.data[stream->ust_metadata_pushed], + stream->chan->metadata_cache->contents.size - + stream->ust_metadata_pushed); assert(write_len != 0); if (write_len < 0) { ERR("Writing one metadata packet"); @@ -2570,7 +2530,7 @@ int commit_one_metadata_packet(struct lttng_consumer_stream *stream) } stream->ust_metadata_pushed += write_len; - assert(stream->chan->metadata_cache->max_offset >= + assert(stream->chan->metadata_cache->contents.size >= stream->ust_metadata_pushed); ret = write_len; @@ -2938,8 +2898,8 @@ static int get_next_subbuffer_metadata(struct lttng_consumer_stream *stream, } } else { pthread_mutex_lock(&stream->chan->metadata_cache->lock); - cache_empty = stream->chan->metadata_cache->max_offset == - stream->ust_metadata_pushed; + cache_empty = stream->chan->metadata_cache->contents.size == + stream->ust_metadata_pushed; pthread_mutex_unlock(&stream->chan->metadata_cache->lock); } } while (!got_subbuffer); @@ -3100,7 +3060,7 @@ int lttng_ustconsumer_data_pending(struct lttng_consumer_stream *stream) /* Ease our life a bit. */ pthread_mutex_lock(&stream->chan->metadata_cache->lock); - contiguous = stream->chan->metadata_cache->max_offset; + contiguous = stream->chan->metadata_cache->contents.size; pthread_mutex_unlock(&stream->chan->metadata_cache->lock); pushed = stream->ust_metadata_pushed;