@@ -132,10 +132,15 @@ namespace detail
132132 BOOST_LEAF_ASSERT (tls::read_ptr<slot<E>>() != this );
133133 }
134134
135- void activate ()
135+ static void reserve ()
136+ {
137+ tls::reserve<slot<E>>();
138+ }
139+
140+ void activate () noexcept
136141 {
137142 prev_ = tls::read_ptr<slot<E>>();
138- tls::write_ptr_alloc <slot<E>>(this );
143+ tls::write_ptr <slot<E>>(this );
139144 }
140145
141146 void deactivate () const noexcept
@@ -283,6 +288,7 @@ namespace detail
283288 BOOST_LEAF_ASSERT (last_ != nullptr );
284289 BOOST_LEAF_ASSERT (*last_ == nullptr );
285290 BOOST_LEAF_ASSERT (tls::read_ptr<slot<T>>() == nullptr );
291+ slot<T>::reserve ();
286292 capturing_slot_node<T> * csn = new capturing_slot_node<T>(last_, err_id, std::forward<E>(e));
287293 csn->activate ();
288294 return csn->value (err_id);
@@ -334,20 +340,24 @@ namespace detail
334340 inline void dynamic_load_ ( int err_id, E && e )
335341 {
336342 if ( slot<dynamic_allocator> * sl = tls::read_ptr<slot<dynamic_allocator>>() )
343+ {
337344 if ( dynamic_allocator * c = sl->has_value_any_key () )
338345 c->dynamic_load (err_id, std::forward<E>(e));
339346 else
340347 sl->load (err_id).dynamic_load (err_id, std::forward<E>(e));
348+ }
341349 }
342350
343351 template <class E , class F >
344352 inline void dynamic_accumulate_ ( int err_id, F && f )
345353 {
346354 if ( slot<dynamic_allocator> * sl = tls::read_ptr<slot<dynamic_allocator>>() )
355+ {
347356 if ( dynamic_allocator * c = sl->has_value (err_id) )
348357 (void ) std::forward<F>(f)(c->dynamic_load (err_id, E{}));
349358 else
350359 (void ) std::forward<F>(f)(sl->load (err_id).dynamic_load (err_id, E{}));
360+ }
351361 }
352362
353363 template <bool OnError, class E >
0 commit comments