Calculate context length outside of retry loop
[lttng-ust.git] / liblttng-ust / lttng-ring-buffer-metadata-client.h
index 0d2a1f838e623ab8147221f23ed4e9ad3a487720..64940163d10250c4ba0e2dcbc60ee8df3f7e774d 100644 (file)
@@ -52,10 +52,11 @@ static inline uint64_t lib_ring_buffer_clock_read(struct channel *chan)
 }
 
 static inline
-unsigned char record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
+size_t record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
                                 struct channel *chan, size_t offset,
                                 size_t *pre_header_padding,
-                                struct lttng_ust_lib_ring_buffer_ctx *ctx)
+                                struct lttng_ust_lib_ring_buffer_ctx *ctx,
+                                void *client_ctx)
 {
        return 0;
 }
@@ -72,7 +73,8 @@ static
 size_t client_record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
                                 struct channel *chan, size_t offset,
                                 size_t *pre_header_padding,
-                                struct lttng_ust_lib_ring_buffer_ctx *ctx)
+                                struct lttng_ust_lib_ring_buffer_ctx *ctx,
+                                void *client_ctx)
 {
        return 0;
 }
@@ -101,6 +103,9 @@ static void client_buffer_begin(struct lttng_ust_lib_ring_buffer *buf, uint64_t
                                handle);
        struct lttng_channel *lttng_chan = channel_get_private(chan);
 
+       assert(header);
+       if (!header)
+               return;
        header->magic = TSDL_MAGIC_NUMBER;
        memcpy(header->uuid, lttng_chan->uuid, sizeof(lttng_chan->uuid));
        header->checksum = 0;           /* 0 if unused */
@@ -129,6 +134,9 @@ static void client_buffer_end(struct lttng_ust_lib_ring_buffer *buf, uint64_t ts
                                handle);
        unsigned long records_lost = 0;
 
+       assert(header);
+       if (!header)
+               return;
        header->content_size = data_size * CHAR_BIT;            /* in bits */
        header->packet_size = PAGE_ALIGN(data_size) * CHAR_BIT; /* in bits */
        /*
@@ -199,7 +207,8 @@ struct lttng_channel *_channel_create(const char *name,
                                unsigned int switch_timer_interval,
                                unsigned int read_timer_interval,
                                unsigned char *uuid,
-                               uint32_t chan_id)
+                               uint32_t chan_id,
+                               const int *stream_fds, int nr_stream_fds)
 {
        struct lttng_channel chan_priv_init;
        struct lttng_ust_shm_handle *handle;
@@ -214,7 +223,8 @@ struct lttng_channel *_channel_create(const char *name,
                        sizeof(struct lttng_channel),
                        &chan_priv_init,
                        buf_addr, subbuf_size, num_subbuf,
-                       switch_timer_interval, read_timer_interval);
+                       switch_timer_interval, read_timer_interval,
+                       stream_fds, nr_stream_fds);
        if (!handle)
                return NULL;
        lttng_chan = priv;
@@ -232,7 +242,18 @@ void lttng_channel_destroy(struct lttng_channel *chan)
 static
 int lttng_event_reserve(struct lttng_ust_lib_ring_buffer_ctx *ctx, uint32_t event_id)
 {
-       return lib_ring_buffer_reserve(&client_config, ctx);
+       int ret;
+
+       ret = lib_ring_buffer_reserve(&client_config, ctx, NULL);
+       if (ret)
+               return ret;
+       if (caa_likely(ctx->ctx_len
+                       >= sizeof(struct lttng_ust_lib_ring_buffer_ctx))) {
+               if (lib_ring_buffer_backend_get_pages(&client_config, ctx,
+                               &ctx->backend_pages))
+                       return -EPERM;
+       }
+       return 0;
 }
 
 static
This page took 0.023666 seconds and 4 git commands to generate.