namespace ggate {
Server::Server(Driver *drv, librbd::Image& image)
- : m_drv(drv), m_image(image), m_lock("rbd::ggate::Server::m_lock"),
+ : m_drv(drv), m_image(image),
m_reader_thread(this, &Server::reader_entry),
m_writer_thread(this, &Server::writer_entry) {
}
dout(20) << "entering run loop" << dendl;
{
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
while (!m_stopping) {
m_cond.WaitInterval(m_lock, utime_t(1, 0));
}
dout(10) << dendl;
{
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
ceph_assert(m_stopping);
}
void Server::io_start(IOContext *ctx) {
dout(20) << ctx << dendl;
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
m_io_pending.push_back(&ctx->item);
}
void Server::io_finish(IOContext *ctx) {
dout(20) << ctx << dendl;
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
ceph_assert(ctx->item.is_on_list());
ctx->item.remove_myself();
Server::IOContext *Server::wait_io_finish() {
dout(20) << dendl;
- Mutex::Locker locker(m_lock);
-
- while (m_io_finished.empty() && !m_stopping) {
- m_cond.Wait(m_lock);
- }
+ std::unique_lock locker{m_lock};
+ m_cond.wait(locker, [this] { return !m_io_finished.empty() || m_stopping});
if (m_io_finished.empty()) {
return nullptr;
ceph_assert(!m_reader_thread.is_started());
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
while (!m_io_pending.empty()) {
m_cond.Wait(m_lock);
if (r != -ECANCELED) {
derr << "recv: " << cpp_strerror(r) << dendl;
}
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
m_stopping = true;
m_cond.Signal();
return;
derr << pctx << ": invalid request command: " << pctx->req->get_cmd()
<< dendl;
c->release();
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
m_stopping = true;
m_cond.Signal();
return;
int r = m_drv->send(ctx->req);
if (r < 0) {
derr << ctx.get() << ": send: " << cpp_strerror(r) << dendl;
- Mutex::Locker locker(m_lock);
+ std::lock_guard locker{m_lock};
m_stopping = true;
m_cond.Signal();
return;
#include "include/rbd/librbd.hpp"
#include "include/xlist.h"
-#include "common/Cond.h"
-#include "common/Mutex.h"
+#include "common/ceph_mutex.h"
#include "common/Thread.h"
namespace rbd {
Driver *m_drv;
librbd::Image &m_image;
- mutable Mutex m_lock;
- Cond m_cond;
+ mutable ceph::mutex m_lock =
+ ceph::make_mutex("rbd::ggate::Server::m_lock");
+ ceph::condition_variable m_cond;
bool m_stopping = false;
ThreadHelper m_reader_thread, m_writer_thread;
xlist<IOContext*> m_io_pending;