• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //          Copyright Oliver Kowalke 2013.
2 // Distributed under the Boost Software License, Version 1.0.
3 //    (See accompanying file LICENSE_1_0.txt or copy at
4 //          http://www.boost.org/LICENSE_1_0.txt)
5 
6 #include "boost/fiber/properties.hpp"
7 
8 #include <boost/assert.hpp>
9 
10 #include "boost/fiber/algo/algorithm.hpp"
11 #include "boost/fiber/scheduler.hpp"
12 #include "boost/fiber/context.hpp"
13 
14 #ifdef BOOST_HAS_ABI_HEADERS
15 #  include BOOST_ABI_PREFIX
16 #endif
17 
18 namespace boost {
19 namespace fibers {
20 
21 void
notify()22 fiber_properties::notify() noexcept {
23     BOOST_ASSERT( nullptr != algo_);
24     // Application code might change an important property for any fiber at
25     // any time. The fiber in question might be ready, running or waiting.
26     // Significantly, only a fiber which is ready but not actually running is
27     // in the sched_algorithm's ready queue. Don't bother the sched_algorithm
28     // with a change to a fiber it's not currently tracking: it will do the
29     // right thing next time the fiber is passed to its awakened() method.
30     if ( ctx_->ready_is_linked() ) {
31         dynamic_cast< algo::algorithm_with_properties_base * >( algo_)->
32             property_change_( ctx_, this);
33     }
34 }
35 
36 }}                                  // boost::fibers
37 
38 #ifdef BOOST_HAS_ABI_HEADERS
39 #  include BOOST_ABI_SUFFIX
40 #endif
41