From 9a2c17bb15c59eeea078594935dc90ad9be46529 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 6 Jul 2009 10:03:27 -0700 Subject: [PATCH] msg: allow multiple dispatchers to chain together --- src/msg/Dispatcher.h | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/msg/Dispatcher.h b/src/msg/Dispatcher.h index 9d568174a2b79..c2e42860e59f7 100644 --- a/src/msg/Dispatcher.h +++ b/src/msg/Dispatcher.h @@ -26,25 +26,28 @@ class Dispatcher { // how i receive messages virtual bool dispatch_impl(Message *m) = 0; - public: - virtual ~Dispatcher() { } - Dispatcher() : next(NULL) { } - - virtual void dispatch(Message *m) { + bool _dispatch(Message *m) { bool ret = false; if (next) - ret = next->dispatch_impl(m); - - if (!ret) { - if (!dispatch_impl(m)) { - generic_dout(0) << "unhandled message " << m << " " << *m - << " from " << m->get_orig_source_inst() - << dendl; - assert(0); - } + ret = next->_dispatch(m); + if (!ret) + ret = dispatch_impl(m); + return ret; + } +public: + virtual void dispatch(Message *m) { + if (!_dispatch(m)) { + generic_dout(0) << "unhandled message " << m << " " << *m + << " from " << m->get_orig_source_inst() + << dendl; + assert(0); } } +public: + virtual ~Dispatcher() { } + Dispatcher() : next(NULL) { } + virtual void link_dispatcher(Dispatcher *disp) { if (!next) { next = disp; -- 2.39.5