]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/ContextCompletion.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3 #include "common/ContextCompletion.h"
8 ContextCompletion::ContextCompletion(Context
*ctx
, bool ignore_enoent
)
9 : m_lock("ceph::ContextCompletion::m_lock"), m_ctx(ctx
),
10 m_ignore_enoent(ignore_enoent
), m_ret(0), m_building(true), m_current_ops(0)
14 void ContextCompletion::finish_adding_requests() {
17 Mutex::Locker
l(m_lock
);
19 complete
= (m_current_ops
== 0);
22 m_ctx
->complete(m_ret
);
27 void ContextCompletion::start_op() {
28 Mutex::Locker
l(m_lock
);
32 void ContextCompletion::finish_op(int r
) {
35 Mutex::Locker
l(m_lock
);
36 if (r
< 0 && m_ret
== 0 && (!m_ignore_enoent
|| r
!= -ENOENT
)) {
41 complete
= (m_current_ops
== 0 && !m_building
);
44 m_ctx
->complete(m_ret
);