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;
}
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);
}
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() {
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 {
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;