SoW-2020-0003: Trace Hit Counters
[lttng-tools.git] / src / common / ust-consumer / ust-consumer.c
index 5f1f93b0e1024c6c1eee422d80930b71ccaaf1a8..017ea5fb8451e7da069521729f2e1dd7501cd126 100644 (file)
@@ -37,6 +37,7 @@
 #include <common/utils.h>
 #include <common/index/index.h>
 #include <common/consumer/consumer.h>
+#include <common/shm.h>
 #include <common/optional.h>
 
 #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:
@@ -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;
 
This page took 0.026585 seconds and 5 git commands to generate.