X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fconsumer%2Fconsumer-timer.c;h=721f146e20fdff2a5d7cecd0e488008bd618269f;hp=e42940ed991fa60a6ec7e0e744ebd1033e203bf9;hb=e8360425c2fd0f8cfef1e678af5adfde7ae0a68e;hpb=0f0479d77e6e55766f9c1ec5765a4479e7b40b79 diff --git a/src/common/consumer/consumer-timer.c b/src/common/consumer/consumer-timer.c index e42940ed9..721f146e2 100644 --- a/src/common/consumer/consumer-timer.c +++ b/src/common/consumer/consumer-timer.c @@ -633,7 +633,7 @@ int consumer_signal_init(void) static int sample_channel_positions(struct lttng_consumer_channel *channel, - uint64_t *_highest_use, uint64_t *_lowest_use, + uint64_t *_highest_use, uint64_t *_lowest_use, uint64_t *_total_consumed, sample_positions_cb sample, get_consumed_cb get_consumed, get_produced_cb get_produced) { @@ -644,6 +644,8 @@ int sample_channel_positions(struct lttng_consumer_channel *channel, uint64_t high = 0, low = UINT64_MAX; struct lttng_ht *ht = consumer_data.stream_per_chan_id_ht; + *_total_consumed = 0; + rcu_read_lock(); cds_lfht_for_each_entry_duplicate(ht->ht, @@ -681,6 +683,15 @@ int sample_channel_positions(struct lttng_consumer_channel *channel, usage = produced - consumed; high = (usage > high) ? usage : high; low = (usage < low) ? usage : low; + + /* + * We don't use consumed here for 2 reasons: + * - output_written takes into account the padding written in the + * tracefiles when we stop the session; + * - the consumed position is not the accurate representation of what + * was extracted from a buffer in overwrite mode. + */ + *_total_consumed += stream->output_written; next: pthread_mutex_unlock(&stream->lock); } @@ -735,7 +746,7 @@ void monitor_timer(struct lttng_consumer_local_data *ctx, } ret = sample_channel_positions(channel, &msg.highest, &msg.lowest, - sample, get_consumed, get_produced); + &msg.total_consumed, sample, get_consumed, get_produced); if (ret) { return; }