if ( std::chrono::steady_clock::now() > timeout_time) {
return false;
}
- context * ctx = context::active();
+ context * active_ctx = context::active();
// store this fiber in order to be notified later
- detail::spinlock_lock lk( wait_queue_splk_);
- if ( ctx == owner_) {
+ detail::spinlock_lock lk{ wait_queue_splk_ };
+ if ( active_ctx == owner_) {
++count_;
return true;
} else if ( nullptr == owner_) {
- owner_ = ctx;
+ owner_ = active_ctx;
count_ = 1;
return true;
}
- BOOST_ASSERT( ! ctx->wait_is_linked() );
- ctx->wait_link( wait_queue_);
+ BOOST_ASSERT( ! active_ctx->wait_is_linked() );
+ active_ctx->wait_link( wait_queue_);
// suspend this fiber until notified or timed-out
- if ( ! context::active()->wait_until( timeout_time, lk) ) {
+ if ( ! active_ctx->wait_until( timeout_time, lk) ) {
// remove fiber from wait-queue
lk.lock();
- ctx->wait_unlink();
+ wait_queue_.remove( * active_ctx);
return false;
}
- BOOST_ASSERT( ! ctx->wait_is_linked() );
- return ctx == owner_;
+ BOOST_ASSERT( ! active_ctx->wait_is_linked() );
+ return active_ctx == owner_;
}
void
recursive_timed_mutex::lock() {
- context * ctx = context::active();
+ context * active_ctx = context::active();
// store this fiber in order to be notified later
- detail::spinlock_lock lk( wait_queue_splk_);
- if ( ctx == owner_) {
+ detail::spinlock_lock lk{ wait_queue_splk_ };
+ if ( active_ctx == owner_) {
++count_;
return;
} else if ( nullptr == owner_) {
- owner_ = ctx;
+ owner_ = active_ctx;
count_ = 1;
return;
}
- BOOST_ASSERT( ! ctx->wait_is_linked() );
- ctx->wait_link( wait_queue_);
+ BOOST_ASSERT( ! active_ctx->wait_is_linked() );
+ active_ctx->wait_link( wait_queue_);
// suspend this fiber
- ctx->suspend( lk);
- BOOST_ASSERT( ! ctx->wait_is_linked() );
+ active_ctx->suspend( lk);
+ BOOST_ASSERT( ! active_ctx->wait_is_linked() );
}
bool
recursive_timed_mutex::try_lock() noexcept {
- context * ctx = context::active();
- detail::spinlock_lock lk( wait_queue_splk_);
+ context * active_ctx = context::active();
+ detail::spinlock_lock lk{ wait_queue_splk_ };
if ( nullptr == owner_) {
- owner_ = ctx;
+ owner_ = active_ctx;
count_ = 1;
- } else if ( ctx == owner_) {
+ } else if ( active_ctx == owner_) {
++count_;
}
lk.unlock();
// let other fiber release the lock
- context::active()->yield();
- return ctx == owner_;
+ active_ctx->yield();
+ return active_ctx == owner_;
}
void
recursive_timed_mutex::unlock() {
- context * ctx = context::active();
- detail::spinlock_lock lk( wait_queue_splk_);
- if ( ctx != owner_) {
- throw lock_error(
+ context * active_ctx = context::active();
+ detail::spinlock_lock lk{ wait_queue_splk_ };
+ if ( active_ctx != owner_) {
+ throw lock_error{
std::make_error_code( std::errc::operation_not_permitted),
- "boost fiber: no privilege to perform the operation");
+ "boost fiber: no privilege to perform the operation" };
}
if ( 0 == --count_) {
if ( ! wait_queue_.empty() ) {
wait_queue_.pop_front();
owner_ = ctx;
count_ = 1;
- context::active()->set_ready( ctx);
+ active_ctx->schedule( ctx);
} else {
owner_ = nullptr;
return;