diff --git a/repos/base/include/base/trace/buffer.h b/repos/base/include/base/trace/buffer.h index 25d7c875f1..439d672b1d 100644 --- a/repos/base/include/base/trace/buffer.h +++ b/repos/base/include/base/trace/buffer.h @@ -124,6 +124,8 @@ class Genode::Trace::Buffer public: + Entry() : _entry(0) { }; + size_t length() const { return _entry->len; } char const *data() const { return _entry->data; } diff --git a/repos/os/include/trace/trace_buffer.h b/repos/os/include/trace/trace_buffer.h index cfc6dab8d8..06349ea1e9 100644 --- a/repos/os/include/trace/trace_buffer.h +++ b/repos/os/include/trace/trace_buffer.h @@ -76,8 +76,10 @@ class Trace_buffer /* iterate over all entries that were not processed yet */ for (; wrapped || !entry.last(); entry = _buffer.next(entry)) { /* if buffer wrapped, we pass the last entry once and continue at first entry */ + bool applied_wrap = false; if (wrapped && entry.last()) { wrapped = false; + applied_wrap = true; entry = _buffer.first(); if (entry.last()) { new_curr = entry; @@ -89,8 +91,11 @@ class Trace_buffer continue; } - if (!functor(entry)) + if (!functor(entry)) { + if (applied_wrap) + new_curr = Trace::Buffer::Entry(); break; + } new_curr = entry; }