From d37e26cd1496f6873f9ce617905d700572ecdb32 Mon Sep 17 00:00:00 2001 From: oliver Kowalke Date: Mon, 23 May 2016 11:19:24 +0200 Subject: [PATCH] apply memory ordering in detaching/attaching a context --- src/scheduler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/scheduler.cpp b/src/scheduler.cpp index 82440428..289890c6 100644 --- a/src/scheduler.cpp +++ b/src/scheduler.cpp @@ -386,9 +386,11 @@ 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_.load() ); + scheduler * new_scheduler = ctx->scheduler_.load( std::memory_order_acquire); + BOOST_ASSERT( nullptr == new_scheduler); + new_scheduler = this; + ctx->scheduler_.store( new_scheduler, std::memory_order_release); ctx->worker_link( worker_queue_); - ctx->scheduler_ = this; } void @@ -401,7 +403,7 @@ scheduler::detach_worker_context( context * ctx) noexcept { BOOST_ASSERT( ! ctx->wait_is_linked() ); BOOST_ASSERT( ! ctx->is_context( type::pinned_context) ); ctx->worker_unlink(); - ctx->scheduler_ = nullptr; + ctx->scheduler_.store( nullptr, std::memory_order_release); } }}