#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"
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)
{
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) {
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
*/
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);
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");
*/
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);
}