]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: allow multiple dispatchers to chain together
authorSage Weil <sage@newdream.net>
Mon, 6 Jul 2009 17:03:27 +0000 (10:03 -0700)
committerSage Weil <sage@newdream.net>
Mon, 6 Jul 2009 17:03:27 +0000 (10:03 -0700)
src/msg/Dispatcher.h

index 9d568174a2b793cca7ac1d495103b7f9c54bfdff..c2e42860e59f763929afddda958b589aa57a7d1a 100644 (file)
@@ -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;