// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #ifndef LIBRBD_IO_ASYNC_OPERATION_H #define LIBRBD_IO_ASYNC_OPERATION_H #include "include/assert.h" #include "include/xlist.h" #include class Context; namespace librbd { class ImageCtx; namespace io { class AsyncOperation { public: AsyncOperation() : m_image_ctx(NULL), m_xlist_item(this) { } ~AsyncOperation() { assert(!m_xlist_item.is_on_list()); } inline bool started() const { return m_xlist_item.is_on_list(); } void start_op(ImageCtx &image_ctx); void finish_op(); void add_flush_context(Context *on_finish); private: ImageCtx *m_image_ctx; xlist::item m_xlist_item; std::list m_flush_contexts; }; } // namespace io } // namespace librbd #endif // LIBRBD_IO_ASYNC_OPERATION_H