]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: Add typedef for shared_ptr<OpRequest>
authorSamuel Just <sam.just@dreamhost.com>
Sat, 24 Mar 2012 04:51:15 +0000 (21:51 -0700)
committerSamuel Just <samuel.just@dreamhost.com>
Mon, 26 Mar 2012 16:38:13 +0000 (09:38 -0700)
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
src/osd/OSD.cc
src/osd/OpRequest.cc
src/osd/OpRequest.h

index a8dab77ddc46ae1a3421d7b5be1cce0de3083d28..196201bc0ec3085c723f341fc542f4fec55d15ee 100644 (file)
@@ -2897,7 +2897,7 @@ void OSD::_dispatch(Message *m)
 
   default:
     {
-      OpRequest *op = new OpRequest(m, &op_tracker);
+      OpRequestRef *op = new OpRequest(m, &op_tracker);
       op->mark_event("waiting_for_osdmap");
       // no map?  starting up?
       if (!osdmap) {
index fda2f3d46a8f4d9a187136344f26671f2d15e9b9..d2f4d026d8f0b6bc9a74fbce3c7050da4a91ff1b 100644 (file)
@@ -94,7 +94,18 @@ void OpTracker::mark_event(OpRequest *op, const string &dest)
   Mutex::Locker locker(ops_in_flight_lock);
   utime_t now = ceph_clock_now(g_ceph_context);
   dout(1) << "seq: " << op->seq << ", time: " << now << ", event: " << dest
-         << " " << *op << dendl;
+         << " " << *op->request << dendl;
+}
+
+void OpTracker::RemoveOnDelete::operator()(OpRequest *op) {
+  tracker->unregister_inflight_op(&(op->xitem));
+  delete op;
+}
+
+OpRequestRef OpTracker::create_request(Message *ref)
+{
+  return OpRequestRef(new OpRequest(ref, this),
+                     RemoveOnDelete(this));
 }
 
 void OpRequest::mark_event(const string &event)
index 1b7f7073d1fc6d74e3ef8d376bd603b7ba90b527..926de1550ce6ed119dc9e39a581f231c23532b3c 100644 (file)
 #include "common/Mutex.h"
 #include "include/xlist.h"
 #include "msg/Message.h"
+#include <tr1/memory>
 
 class OpRequest;
+typedef std::tr1::shared_ptr<OpRequest> OpRequestRef;
 class OpTracker {
+  class RemoveOnDelete {
+    OpTracker *tracker;
+  public:
+    RemoveOnDelete(OpTracker *tracker) : tracker(tracker) {}
+    void operator()(OpRequest *op);
+  };
+  friend class RemoveOnDelete;
   uint64_t seq;
   Mutex ops_in_flight_lock;
   xlist<OpRequest *> ops_in_flight;
@@ -33,6 +42,7 @@ public:
   void unregister_inflight_op(xlist<OpRequest*>::item *i);
   bool check_ops_in_flight(std::ostream &out);
   void mark_event(OpRequest *op, const string &evt);
+  OpRequestRef create_request(Message *req);
 };
 
 /**
@@ -69,7 +79,6 @@ public:
     tracker->register_inflight_op(&xitem);
   }
   ~OpRequest() {
-    tracker->unregister_inflight_op(&xitem);
     assert(request);
     request->put();
   }