Mutex::Locker locker(m_lock);
bool accept_requests = (!is_shutdown() && m_state == STATE_LOCKED &&
- !m_request_blocked);
+ m_request_blocked_count == 0);
*ret_val = m_request_blocked_ret_val;
ldout(m_image_ctx.cct, 20) << this << " " << __func__ << "="
template <typename I>
void ExclusiveLock<I>::block_requests(int r) {
Mutex::Locker locker(m_lock);
- assert(!m_request_blocked);
- m_request_blocked = true;
- m_request_blocked_ret_val = r;
+ m_request_blocked_count++;
+ if (m_request_blocked_ret_val == 0) {
+ m_request_blocked_ret_val = r;
+ }
ldout(m_image_ctx.cct, 20) << this << " " << __func__ << dendl;
}
template <typename I>
void ExclusiveLock<I>::unblock_requests() {
Mutex::Locker locker(m_lock);
- assert(m_request_blocked);
- m_request_blocked = false;
- m_request_blocked_ret_val = 0;
+ assert(m_request_blocked_count > 0);
+ m_request_blocked_count--;
+ if (m_request_blocked_count == 0) {
+ m_request_blocked_ret_val = 0;
+ }
ldout(m_image_ctx.cct, 20) << this << " " << __func__ << dendl;
}
ActionsContexts m_actions_contexts;
- bool m_request_blocked = false;
+ uint32_t m_request_blocked_count = 0;
int m_request_blocked_ret_val = 0;
std::string encode_lock_cookie() const;