]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
lockdep: add lockdep_register_ceph_context,cleanup
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 10 Jun 2011 17:31:47 +0000 (10:31 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Mon, 20 Jun 2011 23:06:54 +0000 (16:06 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/common/common_init.cc
src/common/lockdep.cc
src/common/lockdep.h

index ff88c0c035f2182261556ef66d9c2dec7622e30f..acaa277ab07eb09b8a3f307ede8c380995fef7b8 100644 (file)
@@ -144,6 +144,7 @@ void common_init(std::vector < const char* >& args,
   if (g_lockdep) {
     cout << TEXT_YELLOW << "*** lockdep is enabled (" << g_lockdep
         << ") ***" << TEXT_NORMAL << std::endl;
+    lockdep_register_ceph_context(cct);
   }
 }
 
index 9b494420b0927f577308203a4245da6a7473e3a3..d3963f91eb14245c36674d7c1edb9226cc5915c1 100644 (file)
@@ -1,3 +1,16 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2008-2011 New Dream Network
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
 #include "BackTrace.h"
 #include "Clock.h"
 #include "common/config.h"
 
 #include <ext/hash_map>
 
+/******* Constants **********/
 #define DOUT_SUBSYS lockdep
+#define MAX_LOCKS  100   // increase me as needed
+#define BACKTRACE_SKIP 3
 
-// global
+/******* Globals **********/
 int g_lockdep = get_env_int("CEPH_LOCKDEP");
-
-// disable lockdep when this module destructs.
 struct lockdep_stopper_t {
+  // disable lockdep when this module destructs.
   ~lockdep_stopper_t() {
     g_lockdep = 0;
   }
 };
-
 static lockdep_stopper_t lockdep_stopper;
-
-
-pthread_mutex_t lockdep_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-
-#define MAX_LOCKS  100   // increase me as needed
-
-hash_map<const char *, int> lock_ids;
-map<int, const char *> lock_names;
-
-int last_id = 0;
-
-hash_map<pthread_t, map<int,BackTrace*> > held;
-BackTrace *follows[MAX_LOCKS][MAX_LOCKS];       // follows[a][b] means b taken after a
-
-
-#define BACKTRACE_SKIP 3
-
+static pthread_mutex_t lockdep_mutex = PTHREAD_MUTEX_INITIALIZER;
+static hash_map<const char *, int> lock_ids;
+static map<int, const char *> lock_names;
+static int last_id = 0;
+static hash_map<pthread_t, map<int,BackTrace*> > held;
+static BackTrace *follows[MAX_LOCKS][MAX_LOCKS];       // follows[a][b] means b taken after a
+static CephContext *g_lockdep_ceph_ctx = NULL;
+
+/******* Functions **********/
+void lockdep_register_ceph_context(CephContext *cct)
+{
+  pthread_mutex_lock(&lockdep_mutex);
+  g_lockdep_ceph_ctx = cct;
+  pthread_mutex_unlock(&lockdep_mutex);
+}
 
 int lockdep_dump_locks()
 {
index d78e50a86293b88a101dcec4e22c440c4fe0c46c..9debdb667710374690129810e75546cf83758e1d 100644 (file)
@@ -1,8 +1,25 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2008-2011 New Dream Network
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
 #ifndef CEPH_LOCKDEP_H
 #define CEPH_LOCKDEP_H
 
+class CephContext;
+
 extern int g_lockdep;
 
+extern void lockdep_register_ceph_context(CephContext *cct);
 extern int lockdep_register(const char *n);
 extern int lockdep_will_lock(const char *n, int id);
 extern int lockdep_locked(const char *n, int id, bool force_backtrace=false);