From 9c3c61c317fb9e90e065eb196103f8984f6d1885 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 19 Nov 2008 19:43:58 -0800 Subject: [PATCH] xlist: enforce removal from xlist 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 | 3 ++- src/mds/CacheObject.cc | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/include/xlist.h b/src/include/xlist.h index 38e8aa883191b..561b7639f3774 100644 --- a/src/include/xlist.h +++ b/src/include/xlist.h @@ -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); diff --git a/src/mds/CacheObject.cc b/src/mds/CacheObject.cc index 7e867760ec76a..aae16edd0b98f 100644 --- a/src/mds/CacheObject.cc +++ b/src/mds/CacheObject.cc @@ -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); -- 2.39.5