Prepare the ring-buffer config to have custom callbacks. These custom callbacks are not related to the ring-buffer operations but allow applications to add custom functions. No additional feature or change in behaviour in this patch.
Signed-off-by: Julien Desfossez <[email protected]> --- include/lttng/ringbuffer-config.h | 1 + include/lttng/ust-events.h | 6 +++--- liblttng-ust/lttng-rb-clients.h | 8 ++++++++ liblttng-ust/lttng-ring-buffer-client.h | 18 +++++++++++++++++- liblttng-ust/lttng-ring-buffer-metadata-client.h | 18 +++++++++++++++++- 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 liblttng-ust/lttng-rb-clients.h diff --git a/include/lttng/ringbuffer-config.h b/include/lttng/ringbuffer-config.h index 3b7d348..e81b827 100644 --- a/include/lttng/ringbuffer-config.h +++ b/include/lttng/ringbuffer-config.h @@ -204,6 +204,7 @@ struct lttng_ust_lib_ring_buffer_config { * callbacks and update the cb pointers. */ int client_type; + const struct lttng_ust_lib_ring_buffer_client_cb *cb_ptr; char padding[LTTNG_UST_RING_BUFFER_CONFIG_PADDING]; }; diff --git a/include/lttng/ust-events.h b/include/lttng/ust-events.h index f40c044..153c0ff 100644 --- a/include/lttng/ust-events.h +++ b/include/lttng/ust-events.h @@ -569,9 +569,9 @@ int lttng_add_ip_to_ctx(struct lttng_ctx **ctx); void lttng_context_vtid_reset(void); void lttng_context_vpid_reset(void); -extern const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_metadata; -extern const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_discard; -extern const struct lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_overwrite; +extern const struct specialized_lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_metadata; +extern const struct specialized_lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_discard; +extern const struct specialized_lttng_ust_lib_ring_buffer_client_cb *lttng_client_callbacks_overwrite; struct lttng_transport *lttng_transport_find(const char *name); diff --git a/liblttng-ust/lttng-rb-clients.h b/liblttng-ust/lttng-rb-clients.h new file mode 100644 index 0000000..37fd842 --- /dev/null +++ b/liblttng-ust/lttng-rb-clients.h @@ -0,0 +1,8 @@ +#ifndef _LTTNG_RB_CLIENT_H +#define _LTTNG_RB_CLIENT_H + +struct specialized_lttng_ust_lib_ring_buffer_client_cb { + struct lttng_ust_lib_ring_buffer_client_cb parent; +}; + +#endif /* _LTTNG_RB_CLIENT_H */ diff --git a/liblttng-ust/lttng-ring-buffer-client.h b/liblttng-ust/lttng-ring-buffer-client.h index 72b6d2c..94db97e 100644 --- a/liblttng-ust/lttng-ring-buffer-client.h +++ b/liblttng-ust/lttng-ring-buffer-client.h @@ -161,6 +161,7 @@ unsigned char record_header_size(const struct lttng_ust_lib_ring_buffer_config * } #include "../libringbuffer/api.h" +#include "lttng-rb-clients.h" static void lttng_write_event_header_slow(const struct lttng_ust_lib_ring_buffer_config *config, @@ -385,6 +386,19 @@ static void client_buffer_finalize(struct lttng_ust_lib_ring_buffer *buf, void * { } +static const +struct specialized_lttng_ust_lib_ring_buffer_client_cb client_cb = { + .parent = { + .ring_buffer_clock_read = client_ring_buffer_clock_read, + .record_header_size = client_record_header_size, + .subbuffer_header_size = client_packet_header_size, + .buffer_begin = client_buffer_begin, + .buffer_end = client_buffer_end, + .buffer_create = client_buffer_create, + .buffer_finalize = client_buffer_finalize, + }, +}; + static const struct lttng_ust_lib_ring_buffer_config client_config = { .cb.ring_buffer_clock_read = client_ring_buffer_clock_read, .cb.record_header_size = client_record_header_size, @@ -404,9 +418,11 @@ static const struct lttng_ust_lib_ring_buffer_config client_config = { .ipi = RING_BUFFER_NO_IPI_BARRIER, .wakeup = LTTNG_CLIENT_WAKEUP, .client_type = LTTNG_CLIENT_TYPE, + + .cb_ptr = &client_cb.parent, }; -const struct lttng_ust_lib_ring_buffer_client_cb *LTTNG_CLIENT_CALLBACKS = &client_config.cb; +const struct specialized_lttng_ust_lib_ring_buffer_client_cb *LTTNG_CLIENT_CALLBACKS = &client_cb; static struct lttng_channel *_channel_create(const char *name, diff --git a/liblttng-ust/lttng-ring-buffer-metadata-client.h b/liblttng-ust/lttng-ring-buffer-metadata-client.h index 89f2620..5098f21 100644 --- a/liblttng-ust/lttng-ring-buffer-metadata-client.h +++ b/liblttng-ust/lttng-ring-buffer-metadata-client.h @@ -61,6 +61,7 @@ unsigned char record_header_size(const struct lttng_ust_lib_ring_buffer_config * } #include "../libringbuffer/api.h" +#include "lttng-rb-clients.h" static uint64_t client_ring_buffer_clock_read(struct channel *chan) { @@ -153,6 +154,19 @@ static void client_buffer_finalize(struct lttng_ust_lib_ring_buffer *buf, { } +static const +struct specialized_lttng_ust_lib_ring_buffer_client_cb client_cb = { + .parent = { + .ring_buffer_clock_read = client_ring_buffer_clock_read, + .record_header_size = client_record_header_size, + .subbuffer_header_size = client_packet_header_size, + .buffer_begin = client_buffer_begin, + .buffer_end = client_buffer_end, + .buffer_create = client_buffer_create, + .buffer_finalize = client_buffer_finalize, + }, +}; + static const struct lttng_ust_lib_ring_buffer_config client_config = { .cb.ring_buffer_clock_read = client_ring_buffer_clock_read, .cb.record_header_size = client_record_header_size, @@ -172,9 +186,11 @@ static const struct lttng_ust_lib_ring_buffer_config client_config = { .ipi = RING_BUFFER_NO_IPI_BARRIER, .wakeup = RING_BUFFER_WAKEUP_BY_WRITER, .client_type = LTTNG_CLIENT_TYPE, + + .cb_ptr = &client_cb.parent, }; -const struct lttng_ust_lib_ring_buffer_client_cb *LTTNG_CLIENT_CALLBACKS = &client_config.cb; +const struct specialized_lttng_ust_lib_ring_buffer_client_cb *LTTNG_CLIENT_CALLBACKS = &client_cb; static struct lttng_channel *_channel_create(const char *name, -- 1.7.10.4 _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
