X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttng-events.c;h=567df65acea12345f51e46c937efa5f95cb15202;hb=f613e3e6ea34dec9fe9232056bc02f6d80d95965;hp=27a8f8644477be0bcf41c3732622e0e8c0f9fa57;hpb=b3c40230ad700b12c39640d8593aece428a2702b;p=lttng-modules.git diff --git a/lttng-events.c b/lttng-events.c index 27a8f864..567df65a 100644 --- a/lttng-events.c +++ b/lttng-events.c @@ -561,8 +561,16 @@ int lttng_metadata_output_channel(struct lttng_channel *chan, int ret = 0; size_t len, reserve_len; + /* + * Ensure we support mutiple get_next / put sequences followed + * by put_next. + */ + WARN_ON(stream->metadata_in < stream->metadata_out); + if (stream->metadata_in != stream->metadata_out) + return 0; + len = stream->metadata_cache->metadata_written - - stream->metadata_cache_read; + stream->metadata_in; if (!len) return 0; reserve_len = min_t(size_t, @@ -579,10 +587,10 @@ int lttng_metadata_output_channel(struct lttng_channel *chan, goto end; } chan->ops->event_write(&ctx, - stream->metadata_cache->data + stream->metadata_cache_read, + stream->metadata_cache->data + stream->metadata_in, reserve_len); chan->ops->event_commit(&ctx); - stream->metadata_cache_read += reserve_len; + stream->metadata_in += reserve_len; ret = reserve_len; end: