From: Sage Weil Date: Wed, 14 Sep 2016 13:55:08 +0000 (-0400) Subject: os/bluestore: clear SharedBlob cache in dtor X-Git-Tag: v11.0.1~238^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cdde7b6ad767d28126cf4f903f117f1bdeca1e82;p=ceph.git os/bluestore: clear SharedBlob cache in dtor Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 0f15de972429..c9e513a70864 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1177,6 +1177,21 @@ ostream& operator<<(ostream& out, const BlueStore::SharedBlob& sb) return out << ")"; } +BlueStore::SharedBlob::SharedBlob(uint64_t i, const string& k, Cache *c) + : sbid(i), + key(k), + bc(c) +{ +} + +BlueStore::SharedBlob::~SharedBlob() +{ + if (bc.cache) { // the dummy instances have a nullptr + std::lock_guard l(bc.cache->lock); + bc._clear(); + } +} + void BlueStore::SharedBlob::put() { if (--nref == 0) { diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 2a836f8f7295..c90f4d3314d9 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -314,10 +314,8 @@ public: BufferSpace bc; ///< buffer cache - SharedBlob(uint64_t i, const string& k, Cache *c) : sbid(i), key(k), bc(c) {} - ~SharedBlob() { - assert(bc.empty()); - } + SharedBlob(uint64_t i, const string& k, Cache *c); + ~SharedBlob(); friend void intrusive_ptr_add_ref(SharedBlob *b) { b->get(); } friend void intrusive_ptr_release(SharedBlob *b) { b->put(); }