//ust// #include <linux/cpu.h>
//ust// #include <linux/splice.h>
//ust// #include <linux/bitops.h>
-#include "kernelcompat.h"
+#include <ust/kernelcompat.h>
#include <sys/mman.h>
#include <sys/ipc.h>
#include <sys/shm.h>
+#include <fcntl.h>
//#include "list.h"
#include "relay.h"
#include "channels.h"
//ust// init_waitqueue_head(&buf->read_wait);
kref_init(&buf->kref);
//ust// setup_timer(&buf->timer, wakeup_readers, (unsigned long)buf);
- } else
+ } //ust// else
//ust// del_timer_sync(&buf->timer);
buf->finalized = 0;
ltt_buf->data_ready_fd_read = fds[0];
ltt_buf->data_ready_fd_write = fds[1];
+ /* FIXME: do we actually need this? */
+ result = fcntl(fds[0], F_SETFL, O_NONBLOCK);
+ if(result == -1) {
+ PERROR("fcntl");
+ }
+
//ust// ltt_buf->commit_seq = malloc(sizeof(ltt_buf->commit_seq) * n_subbufs);
//ust// if(!ltt_buf->commit_seq) {
//ust// return -1;
- (local_read(<t_buf->commit_count[subbuf_index])
& ltt_channel->commit_count_mask);
if (offsets->reserve_commit_diff == 0) {
+ long consumed;
+
+ consumed = atomic_long_read(<t_buf->consumed);
+
/* Next buffer not corrupted. */
if (!ltt_channel->overwrite &&
(SUBBUF_TRUNC(offsets->begin, buf->chan)
- - SUBBUF_TRUNC(atomic_long_read(
- <t_buf->consumed),
- buf->chan))
+ - SUBBUF_TRUNC(consumed, buf->chan))
>= rchan->alloc_size) {
+
+ long consumed_idx = SUBBUF_INDEX(consumed, buf->chan);
+ long commit_count = local_read(<t_buf->commit_count[consumed_idx]);
+ if(((commit_count - buf->chan->subbuf_size) & ltt_channel->commit_count_mask) - (BUFFER_TRUNC(consumed, buf->chan) >> ltt_channel->n_subbufs_order) != 0) {
+ WARN("Event dropped. Caused by non-committed event.");
+ }
+ else {
+ WARN("Event dropped. Caused by non-consumed buffer.");
+ }
/*
* We do not overwrite non consumed buffers
* and we are full : event is lost.