bool accept_requests = (!ML<I>::is_state_shutdown() &&
ML<I>::is_state_locked() &&
m_request_blocked_count == 0);
- *ret_val = m_request_blocked_ret_val;
+ if (ret_val != nullptr) {
+ *ret_val = m_request_blocked_ret_val;
+ }
ldout(m_image_ctx.cct, 20) << "=" << accept_requests << dendl;
return accept_requests;
ExclusiveLock(ImageCtxT &image_ctx);
- bool accept_requests(int *ret_val) const;
+ bool accept_requests(int *ret_val = nullptr) const;
void block_requests(int r);
void unblock_requests();
return;
}
- int r;
if (image_ctx.exclusive_lock->is_lock_owner() &&
- image_ctx.exclusive_lock->accept_requests(&r)) {
+ image_ctx.exclusive_lock->accept_requests()) {
send_local_request();
owner_lock.put_read();
return;
}
// need to upgrade to a write lock
- int r = 0;
bool trying_lock = false;
C_SaferCond ctx;
m_image_ctx.owner_lock.put_read();
RWLock::WLocker owner_locker(m_image_ctx.owner_lock);
if (m_image_ctx.exclusive_lock != nullptr &&
(!m_image_ctx.exclusive_lock->is_lock_owner() ||
- !m_image_ctx.exclusive_lock->accept_requests(&r))) {
+ !m_image_ctx.exclusive_lock->accept_requests())) {
m_image_ctx.exclusive_lock->try_acquire_lock(&ctx);
trying_lock = true;
}
}
+ int r = 0;
if (trying_lock) {
r = ctx.wait();
}