]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/RefCountedObject: optionally debug
authorSage Weil <sage@inktank.com>
Tue, 1 Jul 2014 22:43:47 +0000 (15:43 -0700)
committerSage Weil <sage@inktank.com>
Thu, 3 Jul 2014 21:28:25 +0000 (14:28 -0700)
Introduce a 'refs' subsys for logging.  Print log ref count inc and dec
for any RefCountedObject that gets a cct passed to its ctor.

Signed-off-by: Sage Weil <sage@inktank.com>
src/common/RefCountedObj.h
src/common/config_opts.h

index 042adb587806885b9b01c54830dab0410825ad48..84bd22f57b02b038da87272cb723081b14cff0c6 100644 (file)
 #include "common/Mutex.h"
 #include "common/Cond.h"
 #include "include/atomic.h"
-
+#include "common/ceph_context.h"
 
 struct RefCountedObject {
   atomic_t nref;
-  RefCountedObject() : nref(1) {}
+  CephContext *cct;
+  RefCountedObject(CephContext *c = NULL) : nref(1), cct(c) {}
   virtual ~RefCountedObject() {}
   
   RefCountedObject *get() {
-    //generic_dout(0) << "RefCountedObject::get " << this << " " << nref.read() << " -> " << (nref.read() + 1) << dendl;
-    nref.inc();
+    int v = nref.inc();
+    if (cct)
+      lsubdout(cct, refs, 1) << "RefCountedObject::get " << this << " "
+                            << (v - 1) << " -> " << v
+                            << dendl;
     return this;
   }
   void put() {
-    //generic_dout(0) << "RefCountedObject::put " << this << " " << nref.read() << " -> " << (nref.read() - 1) << dendl;
-    if (nref.dec() == 0)
+    int v = nref.dec();
+    if (cct)
+      lsubdout(cct, refs, 1) << "RefCountedObject::put " << this << " "
+                            << (v + 1) << " -> " << v
+                            << dendl;
+    if (v == 0)
       delete this;
   }
 };
index 1c9dbacc71d0bf97bb812fef6679717b931ff8e1..1257ae47a4adee59d0da1e9f0e9c85b07ac040a2 100644 (file)
@@ -95,6 +95,7 @@ SUBSYS(rgw, 1, 5)                 // log level for the Rados gateway
 SUBSYS(javaclient, 1, 5)
 SUBSYS(asok, 1, 5)
 SUBSYS(throttle, 1, 1)
+SUBSYS(refs, 0, 0)
 
 OPTION(key, OPT_STR, "")
 OPTION(keyfile, OPT_STR, "")