]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Set MForward::client_caps explicitly; this fixes a bad connection deref.
authorGreg Farnum <gregf@hq.newdream.net>
Thu, 25 Mar 2010 19:58:14 +0000 (12:58 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 25 Mar 2010 19:58:14 +0000 (12:58 -0700)
Previously the decoded PaxosServiceMessage would attempt to follow an
uninitialized Connection* and segfault the system.

src/messages/MForward.h
src/mon/Monitor.cc

index 45823ad6a49d8143a3a2a51531eb2d402c80e047..633fd948f336c083c64aaed0ed3a53743c91909c 100644 (file)
@@ -35,6 +35,10 @@ struct MForward : public Message {
     client = m->get_source_inst();
     client_caps = m->get_session()->caps;
   }
+  MForward(PaxosServiceMessage *m, MonCaps caps) :
+    Message(MSG_FORWARD), msg(m), client_caps(caps) {
+    client = m->get_source_inst();
+  }
 
   ~MForward() {
     delete msg;
index e5b0fa6d6e0df8ab23e0d6e62be1d9fa03dd9e6c..c0ad6994e1d38588063d001996ae57b640a4156f 100644 (file)
@@ -487,7 +487,7 @@ void Monitor::resend_routed_requests()
     PaxosServiceMessage *req = (PaxosServiceMessage *)decode_message(q);
 
     dout(10) << " resend to mon" << mon << " tid " << rr->tid << " " << *req << dendl;
-    MForward *forward = new MForward(req);
+    MForward *forward = new MForward(req, rr->session->caps);
     forward->set_priority(req->get_priority());
     messenger->send_message(forward, monmap->get_inst(mon));
   }