template <typename I>
Context *SetSnapRequest<I>::send_shut_down_exclusive_lock(int *result) {
- ExclusiveLock<I> *exclusive_lock;
{
RWLock::RLocker snap_locker(m_image_ctx.snap_lock);
- exclusive_lock = m_image_ctx.exclusive_lock;
+ m_exclusive_lock = m_image_ctx.exclusive_lock;
}
- if (exclusive_lock == nullptr) {
+ if (m_exclusive_lock == nullptr) {
return send_refresh_parent(result);
}
using klass = SetSnapRequest<I>;
Context *ctx = create_context_callback<
klass, &klass::handle_shut_down_exclusive_lock>(this);
- exclusive_lock->shut_down(ctx);
+ m_exclusive_lock->shut_down(ctx);
return nullptr;
}
RWLock::WLocker snap_locker(m_image_ctx.snap_lock);
RWLock::WLocker parent_locker(m_image_ctx.parent_lock);
if (m_snap_id != CEPH_NOSNAP) {
+ assert(m_image_ctx.exclusive_lock == nullptr);
int r = m_image_ctx.snap_set(m_snap_name);
if (r < 0) {
return r;
}
} else {
+ std::swap(m_image_ctx.exclusive_lock, m_exclusive_lock);
m_image_ctx.snap_unset();
}
m_refresh_parent->apply();
}
- std::swap(m_exclusive_lock, m_image_ctx.exclusive_lock);
std::swap(m_object_map, m_image_ctx.object_map);
return 0;
}