+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "common/AsyncOpTracker.h"
-#include "include/Context.h"
-
-AsyncOpTracker::AsyncOpTracker()
- : m_lock("AsyncOpTracker::m_lock", false, false) {
-}
-
-AsyncOpTracker::~AsyncOpTracker() {
- Mutex::Locker locker(m_lock);
- assert(m_pending_ops == 0);
-}
-
-void AsyncOpTracker::start_op() {
- Mutex::Locker locker(m_lock);
- ++m_pending_ops;
-}
-
-void AsyncOpTracker::finish_op() {
- Context *on_finish = nullptr;
- {
- Mutex::Locker locker(m_lock);
- assert(m_pending_ops > 0);
- if (--m_pending_ops == 0) {
- std::swap(on_finish, m_on_finish);
- }
- }
-
- if (on_finish != nullptr) {
- on_finish->complete(0);
- }
-}
-
-void AsyncOpTracker::wait_for_ops(Context *on_finish) {
- {
- Mutex::Locker locker(m_lock);
- assert(m_on_finish == nullptr);
- if (m_pending_ops > 0) {
- m_on_finish = on_finish;
- return;
- }
- }
- on_finish->complete(0);
-}
-
-bool AsyncOpTracker::empty() {
- Mutex::Locker locker(m_lock);
- return (m_pending_ops == 0);
-}
-