return m_on_finish;
}
- if (m_on_releasing != nullptr) {
- // alert caller that we no longer own the exclusive lock
- m_on_releasing->complete(0);
- m_on_releasing = nullptr;
- }
-
send_flush_notifies();
return nullptr;
}
CephContext *cct = m_image_ctx.cct;
ldout(cct, 10) << __func__ << dendl;
+ if (m_on_releasing != nullptr) {
+ // alert caller that we no longer own the exclusive lock
+ m_on_releasing->complete(0);
+ m_on_releasing = nullptr;
+ }
+
librados::ObjectWriteOperation op;
rados::cls::lock::unlock(&op, RBD_LOCK_NAME, m_cookie);
namespace librbd {
namespace exclusive_lock {
+namespace {
+
+struct MockContext : public Context {
+ MOCK_METHOD1(complete, void(int));
+ MOCK_METHOD1(finish, void(int));
+};
+
+} // anonymous namespace
+
using ::testing::_;
using ::testing::InSequence;
using ::testing::Return;
public:
typedef ReleaseRequest<MockImageCtx> MockReleaseRequest;
+ void expect_complete_context(MockContext &mock_context, int r) {
+ EXPECT_CALL(mock_context, complete(r));
+ }
+
void expect_test_features(MockImageCtx &mock_image_ctx, uint64_t features,
bool enabled) {
EXPECT_CALL(mock_image_ctx, test_features(features))
mock_image_ctx.object_map = mock_object_map;
expect_close_object_map(mock_image_ctx, *mock_object_map);
+ MockContext mock_releasing_ctx;
+ expect_complete_context(mock_releasing_ctx, 0);
expect_unlock(mock_image_ctx, 0);
- C_SaferCond release_ctx;
C_SaferCond ctx;
MockReleaseRequest *req = MockReleaseRequest::create(mock_image_ctx,
TEST_COOKIE,
- &release_ctx, &ctx);
+ &mock_releasing_ctx,
+ &ctx);
req->send();
- ASSERT_EQ(0, release_ctx.wait());
ASSERT_EQ(0, ctx.wait());
}