X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-ring-buffer-metadata-client.h;fp=lttng-ring-buffer-metadata-client.h;h=5c8a1df9e1828e76f432c211697d36024b523d80;hb=dd5a0db3ea07c46bee3c1814ef7326736f38a06e;hp=bb91f4d4aaa4a049af5adf40a483f43afefb15bb;hpb=461277e79d60d55afc769d76ece385681835d02b;p=lttng-modules.git diff --git a/lttng-ring-buffer-metadata-client.h b/lttng-ring-buffer-metadata-client.h index bb91f4d4..5c8a1df9 100644 --- a/lttng-ring-buffer-metadata-client.h +++ b/lttng-ring-buffer-metadata-client.h @@ -26,6 +26,8 @@ #include "lttng-events.h" #include "lttng-tracer.h" +static struct lttng_transport lttng_relay_transport; + struct metadata_packet_header { uint32_t magic; /* 0x75D11D57 */ uint8_t uuid[16]; /* Unique Universal Identifier */ @@ -216,6 +218,18 @@ static const struct lib_ring_buffer_config client_config = { .wakeup = RING_BUFFER_WAKEUP_BY_TIMER, }; +static +void release_priv_ops(void *priv_ops) +{ + module_put(THIS_MODULE); +} + +static +void lttng_channel_destroy(struct channel *chan) +{ + channel_destroy(chan); +} + static struct channel *_channel_create(const char *name, struct lttng_channel *lttng_chan, void *buf_addr, @@ -223,15 +237,28 @@ struct channel *_channel_create(const char *name, unsigned int switch_timer_interval, unsigned int read_timer_interval) { - return channel_create(&client_config, name, lttng_chan, buf_addr, + struct channel *chan; + + chan = channel_create(&client_config, name, lttng_chan, buf_addr, subbuf_size, num_subbuf, switch_timer_interval, read_timer_interval); -} + if (chan) { + /* + * Ensure this module is not unloaded before we finish + * using lttng_relay_transport.ops. + */ + if (!try_module_get(THIS_MODULE)) { + printk(KERN_WARNING "LTT : Can't lock transport module.\n"); + goto error; + } + chan->backend.priv_ops = <tng_relay_transport.ops; + chan->backend.release_priv_ops = release_priv_ops; + } + return chan; -static -void lttng_channel_destroy(struct channel *chan) -{ - channel_destroy(chan); +error: + lttng_channel_destroy(chan); + return NULL; } static