]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
TestFileStoreState: make 'm_in_flight' var an atomic_t.
authorJoao Eduardo Luis <jecluis@gmail.com>
Thu, 26 Apr 2012 19:18:28 +0000 (20:18 +0100)
committerJoao Eduardo Luis <jecluis@gmail.com>
Thu, 26 Apr 2012 19:18:28 +0000 (20:18 +0100)
This allows us to increase, decrease and retrieve its value without the
need to lock the class.

Signed-off-by: Joao Eduardo Luis <jecluis@gmail.com>
src/test/filestore/TestFileStoreState.cc
src/test/filestore/TestFileStoreState.h

index 0026bb33e3a6d0d51b5c4311ab20a5d3b478f4b9..59ab69cb348b1d5eb80b53da87a564924552450d 100644 (file)
@@ -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;
 }
index 64914a06e99181021f917808eff3cbccbd0a801d..78bcc96ebb89b57469face8cdc6560b46421b743 100644 (file)
@@ -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;