m_cct(m_rados_api->cct()),
m_io_context(m_rados_api->get_io_context()),
m_api_strand(m_io_context),
- m_context_wq(std::make_unique<asio::ContextWQ>(m_io_context)) {
+ m_context_wq(std::make_unique<asio::ContextWQ>(m_cct, m_io_context)) {
ldout(m_cct, 20) << dendl;
auto rados_threads = m_cct->_conf.get_val<uint64_t>("librados_thread_count");
#include "librbd/asio/ContextWQ.h"
#include "include/Context.h"
#include "common/Cond.h"
+#include "common/dout.h"
+
+#define dout_subsys ceph_subsys_rbd
+#undef dout_prefix
+#define dout_prefix *_dout << "librbd::asio::ContextWQ: " \
+ << this << " " << __func__ << ": "
namespace librbd {
namespace asio {
-ContextWQ::ContextWQ(boost::asio::io_context& io_context)
- : m_io_context(io_context), m_strand(io_context),
+ContextWQ::ContextWQ(CephContext* cct, boost::asio::io_context& io_context)
+ : m_cct(cct), m_io_context(io_context), m_strand(io_context),
m_queued_ops(0) {
+ ldout(m_cct, 20) << dendl;
+}
+
+ContextWQ::~ContextWQ() {
+ ldout(m_cct, 20) << dendl;
}
void ContextWQ::drain() {
+ ldout(m_cct, 20) << dendl;
C_SaferCond ctx;
drain_handler(&ctx);
ctx.wait();
#ifndef CEPH_LIBRBD_ASIO_CONTEXT_WQ_H
#define CEPH_LIBRBD_ASIO_CONTEXT_WQ_H
+#include "include/common_fwd.h"
#include "include/Context.h"
#include <atomic>
#include <boost/asio/io_context.hpp>
class ContextWQ {
public:
- explicit ContextWQ(boost::asio::io_context& io_context);
+ explicit ContextWQ(CephContext* cct, boost::asio::io_context& io_context);
+ ~ContextWQ();
void drain();
}
private:
+ CephContext* m_cct;
boost::asio::io_context& m_io_context;
boost::asio::io_context::strand m_strand;