From: Kefu Chai Date: Sun, 4 Aug 2019 14:48:31 +0000 (+0800) Subject: test/journal: always close object X-Git-Tag: v15.1.0~1967^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=29397ca589485cec26b061213bf5b05cd0db1231;p=ceph-ci.git test/journal: always close object otherwise when we destruct `TestObjectRecorder::Handler::lock` or `journal::JournalRecorder::m_object_locks`, it/they would be still being waited by some condition variable. Signed-off-by: Kefu Chai --- diff --git a/src/test/journal/test_ObjectRecorder.cc b/src/test/journal/test_ObjectRecorder.cc index 2df5bf0faaf..87efca571a6 100644 --- a/src/test/journal/test_ObjectRecorder.cc +++ b/src/test/journal/test_ObjectRecorder.cc @@ -66,10 +66,14 @@ public: static_cast(max_in_flight)} {} ~ObjectRecorderFlusher() { - for (auto& object_recorder : m_object_recorders) { + for (auto& [object_recorder, m] : m_object_recorders) { C_SaferCond cond; object_recorder->flush(&cond); cond.wait(); + std::scoped_lock l{*m}; + if (!object_recorder->is_closed()) { + object_recorder->close(); + } } } journal::ObjectRecorderPtr create_object(const std::string& oid, @@ -84,7 +88,7 @@ public: m_flush_bytes, m_flush_age); } - m_object_recorders.push_back(object); + m_object_recorders.emplace_back(object, lock); m_handler.object_lock = lock; return object; } @@ -110,7 +114,8 @@ public: uint64_t m_flush_bytes = std::numeric_limits::max(); double m_flush_age = 600; uint64_t m_max_in_flight_appends = 0; - using ObjectRecorders = std::list; + using ObjectRecorders = + std::list>; ObjectRecorders m_object_recorders; Handler m_handler; };