summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/MessageBuffer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/network/MessageBuffer.cc')
-rw-r--r--src/mem/ruby/network/MessageBuffer.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/mem/ruby/network/MessageBuffer.cc b/src/mem/ruby/network/MessageBuffer.cc
index 573d8833a..67bc7f72d 100644
--- a/src/mem/ruby/network/MessageBuffer.cc
+++ b/src/mem/ruby/network/MessageBuffer.cc
@@ -60,6 +60,8 @@ MessageBuffer::MessageBuffer(const Params *p)
m_buf_msgs = 0;
m_stall_time = 0;
+
+ m_dequeue_callback = nullptr;
}
unsigned int
@@ -241,10 +243,27 @@ MessageBuffer::dequeue(Tick current_time, bool decrement_messages)
m_buf_msgs--;
}
+ // if a dequeue callback was requested, call it now
+ if (m_dequeue_callback) {
+ m_dequeue_callback();
+ }
+
return delay;
}
void
+MessageBuffer::registerDequeueCallback(std::function<void()> callback)
+{
+ m_dequeue_callback = callback;
+}
+
+void
+MessageBuffer::unregisterDequeueCallback()
+{
+ m_dequeue_callback = nullptr;
+}
+
+void
MessageBuffer::clear()
{
m_prio_heap.clear();