From a52a21b64f6ea00ac56e4ca9b2a06ea2699f6df3 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 28 Nov 2016 22:47:19 +0800 Subject: [PATCH] os/memstore: fix a mem leak in MemStore::Collection::create_object() Signed-off-by: Kefu Chai --- src/os/memstore/MemStore.cc | 9 +++++---- src/os/memstore/MemStore.h | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/os/memstore/MemStore.cc b/src/os/memstore/MemStore.cc index 20a429d7f983e..c5f57eb327d76 100644 --- a/src/os/memstore/MemStore.cc +++ b/src/os/memstore/MemStore.cc @@ -683,10 +683,11 @@ int MemStore::queue_transactions(Sequencer *osr, std::unique_lock lock; if (osr) { - auto seq = reinterpret_cast(&osr->p); - if (*seq == nullptr) - *seq = new OpSequencer; - lock = std::unique_lock((*seq)->mutex); + if (!osr->p) { + osr->p = new OpSequencer(); + } + auto seq = static_cast(osr->p.get()); + lock = std::unique_lock(seq->mutex); } for (vector::iterator p = tls.begin(); p != tls.end(); ++p) { diff --git a/src/os/memstore/MemStore.h b/src/os/memstore/MemStore.h index 3f1fb0b7c23a9..d11ea35486512 100644 --- a/src/os/memstore/MemStore.h +++ b/src/os/memstore/MemStore.h @@ -45,6 +45,7 @@ public: friend void intrusive_ptr_add_ref(Object *o) { o->get(); } friend void intrusive_ptr_release(Object *o) { o->put(); } + Object() : RefCountedObject(nullptr, 0) {} // interface for object data virtual size_t get_size() const = 0; virtual int read(uint64_t offset, uint64_t len, bufferlist &bl) = 0; -- 2.39.5