diff --git a/src/context.cpp b/src/context.cpp index 959773fc..edd43714 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -371,7 +371,7 @@ context::set_terminated() noexcept { bool context::wait_until( std::chrono::steady_clock::time_point const& tp) noexcept { - BOOST_ASSERT( nullptr != scheduler_); + BOOST_ASSERT( nullptr != scheduler_.load() ); BOOST_ASSERT( this == active_); return scheduler_.load()->wait_until( this, tp); } @@ -379,21 +379,21 @@ context::wait_until( std::chrono::steady_clock::time_point const& tp) noexcept { bool context::wait_until( std::chrono::steady_clock::time_point const& tp, detail::spinlock_lock & lk) noexcept { - BOOST_ASSERT( nullptr != scheduler_); + BOOST_ASSERT( nullptr != scheduler_.load() ); BOOST_ASSERT( this == active_); return scheduler_.load()->wait_until( this, tp, lk); } void context::set_ready( context * ctx) noexcept { - BOOST_ASSERT( nullptr != ctx); + //BOOST_ASSERT( nullptr != ctx); BOOST_ASSERT( this != ctx); - BOOST_ASSERT( nullptr != scheduler_); - BOOST_ASSERT( nullptr != ctx->scheduler_); + BOOST_ASSERT( nullptr != scheduler_.load() ); + BOOST_ASSERT( nullptr != ctx->scheduler_.load() ); // FIXME: comparing scheduler address' must be synchronized? // what if ctx is migrated between threads // (other scheduler assigned) - if ( scheduler_ == ctx->scheduler_) { + if ( scheduler_.load() == ctx->scheduler_.load() ) { // local scheduler_.load()->set_ready( ctx); } else { diff --git a/src/scheduler.cpp b/src/scheduler.cpp index 74aec1d9..75e51268 100644 --- a/src/scheduler.cpp +++ b/src/scheduler.cpp @@ -386,7 +386,7 @@ scheduler::attach_worker_context( context * ctx) noexcept { BOOST_ASSERT( ! ctx->terminated_is_linked() ); BOOST_ASSERT( ! ctx->wait_is_linked() ); BOOST_ASSERT( ! ctx->worker_is_linked() ); - BOOST_ASSERT( nullptr == ctx->scheduler_); + BOOST_ASSERT( nullptr == ctx->scheduler_.load() ); ctx->worker_link( worker_queue_); ctx->scheduler_ = this; }