]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/AsyncOpTracker.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_ASYNC_OP_TRACKER_H
5 #define CEPH_ASYNC_OP_TRACKER_H
7 #include "common/ceph_mutex.h"
8 #include "include/Context.h"
10 class AsyncOpTracker
{
18 void wait_for_ops(Context
*on_finish
);
23 ceph::mutex m_lock
= ceph::make_mutex("AsyncOpTracker::m_lock");
24 uint32_t m_pending_ops
= 0;
25 Context
*m_on_finish
= nullptr;
29 class C_TrackedOp
: public Context
{
31 C_TrackedOp(AsyncOpTracker
& async_op_tracker
, Context
* on_finish
)
32 : m_async_op_tracker(async_op_tracker
), m_on_finish(on_finish
) {
33 m_async_op_tracker
.start_op();
36 void finish(int r
) override
{
37 if (m_on_finish
!= nullptr) {
38 m_on_finish
->complete(r
);
40 m_async_op_tracker
.finish_op();
44 AsyncOpTracker
& m_async_op_tracker
;
48 #endif // CEPH_ASYNC_OP_TRACKER_H