From 436f5d656c5ba3c32f1bdc02a1f26e77006284f0 Mon Sep 17 00:00:00 2001 From: Joao Eduardo Luis Date: Thu, 26 Apr 2012 20:18:28 +0100 Subject: [PATCH] TestFileStoreState: make 'm_in_flight' var an atomic_t. This allows us to increase, decrease and retrieve its value without the need to lock the class. Signed-off-by: Joao Eduardo Luis --- src/test/filestore/TestFileStoreState.cc | 4 ++-- src/test/filestore/TestFileStoreState.h | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/test/filestore/TestFileStoreState.cc b/src/test/filestore/TestFileStoreState.cc index 0026bb33e3a6d..59ab69cb348b1 100644 --- a/src/test/filestore/TestFileStoreState.cc +++ b/src/test/filestore/TestFileStoreState.cc @@ -62,12 +62,12 @@ void TestFileStoreState::init(int colls, int objs) m_store->queue_transaction(&(entry->m_osr), t, new C_OnFinished(this, t)); - m_in_flight++; + inc_in_flight(); m_collections.insert(make_pair(coll_id, entry)); m_next_coll_nr++; } - dout(5) << "init has " << m_in_flight << "in-flight transactions" << dendl; + dout(5) << "init has " << m_in_flight.read() << "in-flight transactions" << dendl; wait_for_done(); dout(5) << "init finished" << dendl; } diff --git a/src/test/filestore/TestFileStoreState.h b/src/test/filestore/TestFileStoreState.h index 64914a06e9918..78bcc96ebb89b 100644 --- a/src/test/filestore/TestFileStoreState.h +++ b/src/test/filestore/TestFileStoreState.h @@ -59,19 +59,19 @@ public: int m_num_objs_per_coll; int m_max_in_flight; - int m_in_flight; + atomic_t m_in_flight; Mutex m_finished_lock; Cond m_finished_cond; void wait_for_ready() { Mutex::Locker locker(m_finished_lock); - while ((m_max_in_flight > 0) && (m_in_flight >= m_max_in_flight)) + while ((m_max_in_flight > 0) && ((int)m_in_flight.read() >= m_max_in_flight)) m_finished_cond.Wait(m_finished_lock); } void wait_for_done() { Mutex::Locker locker(m_finished_lock); - while (m_in_flight) + while (m_in_flight.read()) m_finished_cond.Wait(m_finished_lock); } @@ -91,7 +91,8 @@ public: public: TestFileStoreState(FileStore *store) : m_next_coll_nr(0), m_num_objs_per_coll(10), - m_max_in_flight(0), m_in_flight(0), m_finished_lock("Finished Lock") { + m_max_in_flight(0), m_finished_lock("Finished Lock") { + m_in_flight.set(0); m_store.reset(store); } ~TestFileStoreState() { @@ -108,6 +109,14 @@ public: init(m_default_num_colls, 0); } + int inc_in_flight() { + return ((int) m_in_flight.inc()); + } + + int dec_in_flight() { + return ((int) m_in_flight.dec()); + } + coll_entry_t *coll_create(int id); class C_OnFinished: public Context { @@ -121,7 +130,7 @@ public: void finish(int r) { Mutex::Locker locker(m_state->m_finished_lock); - m_state->m_in_flight--; + m_state->dec_in_flight(); m_state->m_finished_cond.Signal(); delete m_tx; -- 2.39.5