]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
xlist: enforce removal from xlist
authorSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 03:43:58 +0000 (19:43 -0800)
committerSage Weil <sage@newdream.net>
Thu, 20 Nov 2008 03:49:49 +0000 (19:49 -0800)
We want to ensure that removal takes place in the correct locking context,
not whatever context the ::item is destroyed in.

src/include/xlist.h
src/mds/CacheObject.cc

index 38e8aa883191bae5288710f73c028e49272dc8e7..561b7639f3774e844f9b34281b0cd5f0f4eb98ad 100644 (file)
@@ -25,7 +25,8 @@ public:
     
     item(T i) : _item(i), _prev(0), _next(0), _list(0) {}
     ~item() { 
-      remove_myself();
+      assert(!is_on_xlist());
+      //remove_myself();
     }
     // no copying!
     item(const item& other);
index 7e867760ec76acac4240f0b24c9da9618e3a781f..aae16edd0b98fae2a4951145736701ac42348ab1 100644 (file)
@@ -86,6 +86,8 @@ int MDSCacheObject::remove_client_lease(ClientLease *l, int mask, Locker *locker
   if (rc == 0) {
     dout(20) << "removing lease for client" << l->client << dendl;
     client_lease_map.erase(l->client);
+    l->lease_item.remove_myself();
+    l->session_lease_item.remove_myself();
     delete l;
     if (client_lease_map.empty())
       put(PIN_CLIENTLEASE);