include/boost/corosio/detail/object_pool.hpp

94.8% Lines (73 / 77) 18.1% Branches (166 / 916) 99.0% Functions (204 / 206, 1 excl)
object_pool.hpp
f(x) Functions (207)
Function Calls Lines Branches Blocks
<unknown function 58> :58 – – – – boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::is_pooled(boost::corosio::detail::(anonymous namespace)::pool_impl const*) :78 24x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::is_pooled(boost::corosio::detail::(anonymous namespace)::self_ref_derived const*) :78 1x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::is_pooled(boost::corosio::detail::(anonymous namespace)::self_ref_impl const*) :78 1x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::is_pooled(boost::corosio::detail::kqueue_descriptor const*) :78 174x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::is_pooled(boost::corosio::detail::kqueue_local_datagram_socket const*) :78 284x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::is_pooled(boost::corosio::detail::kqueue_local_stream_acceptor const*) :78 153x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::is_pooled(boost::corosio::detail::kqueue_local_stream_socket const*) :78 378x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::is_pooled(boost::corosio::detail::kqueue_tcp_acceptor const*) :78 3848x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::is_pooled(boost::corosio::detail::kqueue_tcp_socket const*) :78 33151x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::is_pooled(boost::corosio::detail::kqueue_udp_socket const*) :78 369x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::is_pooled(boost::corosio::detail::posix_random_access_file const*) :78 484x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::is_pooled(boost::corosio::detail::posix_resolver const*) :78 214x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::is_pooled(boost::corosio::detail::posix_signal const*) :78 6902x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::is_pooled(boost::corosio::detail::posix_stream_file const*) :78 1354x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::is_pooled(boost::corosio::detail::select_descriptor const*) :78 171x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::is_pooled(boost::corosio::detail::select_local_datagram_socket const*) :78 276x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::is_pooled(boost::corosio::detail::select_local_stream_acceptor const*) :78 149x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::is_pooled(boost::corosio::detail::select_local_stream_socket const*) :78 366x 0.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::is_pooled(boost::corosio::detail::select_tcp_acceptor const*) :78 1874x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::is_pooled(boost::corosio::detail::select_tcp_socket const*) :78 13314x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::is_pooled(boost::corosio::detail::select_udp_socket const*) :78 360x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::is_pooled(boost::corosio::detail::timer::implementation const*) :78 30636x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::adopt(boost::corosio::detail::(anonymous namespace)::pool_impl*) :102 10x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::adopt(boost::corosio::detail::(anonymous namespace)::self_ref_derived*) :102 1x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::adopt(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) :102 1x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::adopt(boost::corosio::detail::kqueue_descriptor*) :102 71x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::adopt(boost::corosio::detail::kqueue_local_datagram_socket*) :102 125x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::adopt(boost::corosio::detail::kqueue_local_stream_acceptor*) :102 59x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::adopt(boost::corosio::detail::kqueue_local_stream_socket*) :102 169x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::adopt(boost::corosio::detail::kqueue_tcp_acceptor*) :102 1244x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::adopt(boost::corosio::detail::kqueue_tcp_socket*) :102 4521x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::adopt(boost::corosio::detail::kqueue_udp_socket*) :102 167x 100.0% – 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::adopt(boost::corosio::detail::posix_random_access_file*) :102 242x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::adopt(boost::corosio::detail::posix_resolver*) :102 75x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::adopt(boost::corosio::detail::posix_signal*) :102 3415x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::adopt(boost::corosio::detail::posix_stream_file*) :102 645x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::adopt(boost::corosio::detail::select_descriptor*) :102 69x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::adopt(boost::corosio::detail::select_local_datagram_socket*) :102 121x 85.7% 7.8% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::adopt(boost::corosio::detail::select_local_stream_acceptor*) :102 57x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::adopt(boost::corosio::detail::select_local_stream_socket*) :102 163x 0.0% 0.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::adopt(boost::corosio::detail::select_tcp_acceptor*) :102 774x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::adopt(boost::corosio::detail::select_tcp_socket*) :102 1987x 85.7% 12.5% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::adopt(boost::corosio::detail::select_udp_socket*) :102 163x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::adopt(boost::corosio::detail::timer::implementation*) :102 15327x 85.7% 25.0% 36.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::remove(boost::corosio::detail::(anonymous namespace)::pool_impl*) :129 3x 83.3% 33.3% 50.0% boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::remove(boost::corosio::detail::timer::implementation*) :129 14207x 83.3% 33.3% 50.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::~object_pool() :151 14x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::~object_pool() :151 2x 100.0% 61.1% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::~object_pool() :151 2x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::~object_pool() :151 118x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::~object_pool() :151 150x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::~object_pool() :151 106x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::~object_pool() :151 224x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::~object_pool() :151 1744x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::~object_pool() :151 2176x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::~object_pool() :151 226x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::~object_pool() :151 374x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::~object_pool() :151 148x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::~object_pool() :151 1180x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::~object_pool() :151 1178x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::~object_pool() :151 116x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::~object_pool() :151 146x 100.0% 18.2% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::~object_pool() :151 102x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::~object_pool() :151 216x 0.0% 0.0% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::~object_pool() :151 806x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::~object_pool() :151 932x 100.0% 29.2% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::~object_pool() :151 222x 100.0% 58.3% 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::~object_pool() :151 879x 100.0% 66.7% 77.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::object_pool() :164 14x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::object_pool() :164 2x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::object_pool() :164 2x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::object_pool() :164 118x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::object_pool() :164 150x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::object_pool() :164 106x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::object_pool() :164 224x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::object_pool() :164 1744x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::object_pool() :164 2174x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::object_pool() :164 226x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::object_pool() :164 374x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::object_pool() :164 148x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::object_pool() :164 1180x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::object_pool() :164 1178x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::object_pool() :164 116x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::object_pool() :164 146x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::object_pool() :164 102x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::object_pool() :164 216x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::object_pool() :164 806x 0.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::object_pool() :164 932x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::object_pool() :164 222x 100.0% – 100.0% boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::object_pool() :164 879x 100.0% – 100.0% boost::corosio::detail::(anonymous namespace)::pool_impl* boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::acquire<>() :190 13x 100.0% – 60.0% boost::corosio::detail::(anonymous namespace)::self_ref_derived* boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::acquire<>() :190 1x 100.0% 46.7% 46.0% boost::corosio::detail::(anonymous namespace)::self_ref_impl* boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::acquire<>() :190 1x 100.0% – 46.0% boost::corosio::detail::kqueue_descriptor* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::acquire<boost::corosio::detail::kqueue_descriptor_service&>(boost::corosio::detail::kqueue_descriptor_service&) :190 103x 100.0% – 61.0% boost::corosio::detail::kqueue_local_datagram_socket* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::acquire<boost::corosio::detail::kqueue_local_datagram_service&>(boost::corosio::detail::kqueue_local_datagram_service&) :190 159x 100.0% – 61.0% boost::corosio::detail::kqueue_local_stream_acceptor* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::acquire<boost::corosio::detail::kqueue_local_stream_acceptor_service&>(boost::corosio::detail::kqueue_local_stream_acceptor_service&) :190 94x 100.0% – 61.0% boost::corosio::detail::kqueue_local_stream_socket* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::acquire<boost::corosio::detail::kqueue_local_stream_service&>(boost::corosio::detail::kqueue_local_stream_service&) :190 209x 100.0% – 61.0% boost::corosio::detail::kqueue_tcp_acceptor* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::acquire<boost::corosio::detail::kqueue_tcp_acceptor_service&>(boost::corosio::detail::kqueue_tcp_acceptor_service&) :190 2604x 100.0% 62.5% 61.0% boost::corosio::detail::kqueue_tcp_socket* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::acquire<boost::corosio::detail::kqueue_tcp_service&>(boost::corosio::detail::kqueue_tcp_service&) :190 28622x 100.0% – 61.0% boost::corosio::detail::kqueue_udp_socket* boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::acquire<boost::corosio::detail::kqueue_udp_service&>(boost::corosio::detail::kqueue_udp_service&) :190 202x 100.0% – 61.0% boost::corosio::detail::posix_random_access_file* boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::acquire<boost::corosio::detail::posix_random_access_file_service&>(boost::corosio::detail::posix_random_access_file_service&) :190 242x 68.8% 37.5% 46.0% boost::corosio::detail::posix_resolver* boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::acquire<boost::corosio::detail::posix_resolver_service&>(boost::corosio::detail::posix_resolver_service&) :190 139x 100.0% 62.5% 61.0% boost::corosio::detail::posix_signal* boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::acquire<boost::corosio::detail::posix_signal_service&>(boost::corosio::detail::posix_signal_service&) :190 3487x 100.0% 62.5% 61.0% boost::corosio::detail::posix_stream_file* boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::acquire<boost::corosio::detail::posix_stream_file_service&>(boost::corosio::detail::posix_stream_file_service&) :190 709x 68.8% 37.5% 61.0% boost::corosio::detail::select_descriptor* boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::acquire<boost::corosio::detail::select_descriptor_service&>(boost::corosio::detail::select_descriptor_service&) :190 102x 100.0% 62.5% 61.0% boost::corosio::detail::select_local_datagram_socket* boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::acquire<boost::corosio::detail::select_local_datagram_service&>(boost::corosio::detail::select_local_datagram_service&) :190 155x 100.0% 19.5% 61.0% boost::corosio::detail::select_local_stream_acceptor* boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::acquire<boost::corosio::detail::select_local_stream_acceptor_service&>(boost::corosio::detail::select_local_stream_acceptor_service&) :190 92x 100.0% 62.5% 61.0% boost::corosio::detail::select_local_stream_socket* boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::acquire<boost::corosio::detail::select_local_stream_service&>(boost::corosio::detail::select_local_stream_service&) :190 203x 0.0% 0.0% 61.0% boost::corosio::detail::select_tcp_acceptor* boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::acquire<boost::corosio::detail::select_tcp_acceptor_service&>(boost::corosio::detail::select_tcp_acceptor_service&) :190 1100x 100.0% 62.5% 61.0% boost::corosio::detail::select_tcp_socket* boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::acquire<boost::corosio::detail::select_tcp_service&>(boost::corosio::detail::select_tcp_service&) :190 11327x 68.8% 18.8% 61.0% boost::corosio::detail::select_udp_socket* boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::acquire<boost::corosio::detail::select_udp_service&>(boost::corosio::detail::select_udp_service&) :190 197x 100.0% 62.5% 61.0% boost::corosio::detail::timer::implementation* boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::acquire<boost::corosio::detail::timer_service&>(boost::corosio::detail::timer_service&) :190 4807x 100.0% 62.5% 61.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::recycle(boost::corosio::detail::(anonymous namespace)::pool_impl*) :245 11x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::recycle(boost::corosio::detail::(anonymous namespace)::self_ref_derived*) :245 0 88.9% 16.7% 0.0% boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::recycle(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) :245 0 100.0% – 0.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::recycle(boost::corosio::detail::kqueue_descriptor*) :245 103x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::recycle(boost::corosio::detail::kqueue_local_datagram_socket*) :245 159x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::recycle(boost::corosio::detail::kqueue_local_stream_acceptor*) :245 94x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::recycle(boost::corosio::detail::kqueue_local_stream_socket*) :245 209x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::recycle(boost::corosio::detail::kqueue_tcp_acceptor*) :245 2604x 88.9% 39.3% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::recycle(boost::corosio::detail::kqueue_tcp_socket*) :245 28630x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::recycle(boost::corosio::detail::kqueue_udp_socket*) :245 202x 100.0% – 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::recycle(boost::corosio::detail::posix_random_access_file*) :245 242x 88.9% 50.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::recycle(boost::corosio::detail::posix_resolver*) :245 139x 88.9% 50.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::recycle(boost::corosio::detail::posix_signal*) :245 3487x 88.9% 50.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::recycle(boost::corosio::detail::posix_stream_file*) :245 709x 72.2% 28.6% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::recycle(boost::corosio::detail::select_descriptor*) :245 102x 88.9% 50.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::recycle(boost::corosio::detail::select_local_datagram_socket*) :245 155x 88.9% 15.6% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::recycle(boost::corosio::detail::select_local_stream_acceptor*) :245 92x 88.9% 50.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::recycle(boost::corosio::detail::select_local_stream_socket*) :245 203x 0.0% 0.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::recycle(boost::corosio::detail::select_tcp_acceptor*) :245 1100x 88.9% 50.0% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::recycle(boost::corosio::detail::select_tcp_socket*) :245 11327x 72.2% 14.3% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::recycle(boost::corosio::detail::select_udp_socket*) :245 197x 72.2% 28.6% 64.0% boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::recycle(boost::corosio::detail::timer::implementation*) :245 1102x 72.2% 28.6% 41.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&) :292 1x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&) :292 1x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda1'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda1'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&) :292 1x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)&&) :292 1x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)&&) :292 1x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::shutdown<boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::kqueue_descriptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_descriptor>::shutdown()::'lambda'(boost::corosio::detail::kqueue_descriptor*)>(boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::kqueue_descriptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_descriptor>::shutdown()::'lambda'(boost::corosio::detail::kqueue_descriptor*)&&) :292 59x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)&&) :292 75x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)&&) :292 53x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)&&) :292 112x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)&&) :292 872x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)&&) :292 1088x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_udp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_udp_socket*)&&) :292 113x 100.0% – 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::shutdown<boost::corosio::detail::posix_random_access_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_random_access_file*)>(boost::corosio::detail::posix_random_access_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_random_access_file*)&&) :292 187x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::shutdown<boost::corosio::detail::posix_resolver_service::shutdown()::'lambda'(boost::corosio::detail::posix_resolver*)>(boost::corosio::detail::posix_resolver_service::shutdown()::'lambda'(boost::corosio::detail::posix_resolver*)&&) :292 74x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::shutdown<boost::corosio::detail::posix_signal_service::shutdown()::'lambda'(boost::corosio::detail::posix_signal*)>(boost::corosio::detail::posix_signal_service::shutdown()::'lambda'(boost::corosio::detail::posix_signal*)&&) :292 590x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::shutdown<boost::corosio::detail::posix_stream_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_stream_file*)>(boost::corosio::detail::posix_stream_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_stream_file*)&&) :292 589x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::shutdown<boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::select_descriptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_descriptor>::shutdown()::'lambda'(boost::corosio::detail::select_descriptor*)>(boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::select_descriptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_descriptor>::shutdown()::'lambda'(boost::corosio::detail::select_descriptor*)&&) :292 58x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_datagram_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_datagram_socket*)&&) :292 73x 100.0% 15.6% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)&&) :292 51x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_socket*)&&) :292 108x 0.0% 0.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_acceptor*)&&) :292 403x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_socket*)&&) :292 466x 100.0% 25.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_udp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_udp_socket*)&&) :292 111x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::shutdown<boost::corosio::detail::timer_service::shutdown()::'lambda'(boost::corosio::detail::timer::implementation*)>(boost::corosio::detail::timer_service::shutdown()::'lambda'(boost::corosio::detail::timer::implementation*)&&) :292 874x 100.0% 50.0% 69.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&)::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::pool_impl*) const :300 1x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&)::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::pool_impl*) const :300 2x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda1'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda1'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&)::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::pool_impl*) const :300 1x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)&&)::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)::operator()(boost::corosio::detail::(anonymous namespace)::self_ref_derived*) const :300 1x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)&&)::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) const :300 1x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::shutdown<boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::kqueue_descriptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_descriptor>::shutdown()::'lambda'(boost::corosio::detail::kqueue_descriptor*)>(boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::kqueue_descriptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_descriptor>::shutdown()::'lambda'(boost::corosio::detail::kqueue_descriptor*)&&)::'lambda'(boost::corosio::detail::kqueue_descriptor*)::operator()(boost::corosio::detail::kqueue_descriptor*) const :300 13x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)&&)::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)::operator()(boost::corosio::detail::kqueue_local_datagram_socket*) const :300 9x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)&&)::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)::operator()(boost::corosio::detail::kqueue_local_stream_acceptor*) const :300 2x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)&&)::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)::operator()(boost::corosio::detail::kqueue_local_stream_socket*) const :300 11x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)&&)::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)::operator()(boost::corosio::detail::kqueue_tcp_acceptor*) const :300 416x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)&&)::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)::operator()(boost::corosio::detail::kqueue_tcp_socket*) const :300 944x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_udp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_udp_socket*)&&)::'lambda'(boost::corosio::detail::kqueue_udp_socket*)::operator()(boost::corosio::detail::kqueue_udp_socket*) const :300 6x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::shutdown<boost::corosio::detail::posix_random_access_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_random_access_file*)>(boost::corosio::detail::posix_random_access_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_random_access_file*)&&)::'lambda'(boost::corosio::detail::posix_random_access_file*)::operator()(boost::corosio::detail::posix_random_access_file*) const :300 8x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::shutdown<boost::corosio::detail::posix_resolver_service::shutdown()::'lambda'(boost::corosio::detail::posix_resolver*)>(boost::corosio::detail::posix_resolver_service::shutdown()::'lambda'(boost::corosio::detail::posix_resolver*)&&)::'lambda'(boost::corosio::detail::posix_resolver*)::operator()(boost::corosio::detail::posix_resolver*) const :300 3x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::shutdown<boost::corosio::detail::posix_signal_service::shutdown()::'lambda'(boost::corosio::detail::posix_signal*)>(boost::corosio::detail::posix_signal_service::shutdown()::'lambda'(boost::corosio::detail::posix_signal*)&&)::'lambda'(boost::corosio::detail::posix_signal*)::operator()(boost::corosio::detail::posix_signal*) const :300 3212x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::shutdown<boost::corosio::detail::posix_stream_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_stream_file*)>(boost::corosio::detail::posix_stream_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_stream_file*)&&)::'lambda'(boost::corosio::detail::posix_stream_file*)::operator()(boost::corosio::detail::posix_stream_file*) const :300 4x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::shutdown<boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::select_descriptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_descriptor>::shutdown()::'lambda'(boost::corosio::detail::select_descriptor*)>(boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::select_descriptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_descriptor>::shutdown()::'lambda'(boost::corosio::detail::select_descriptor*)&&)::'lambda'(boost::corosio::detail::select_descriptor*)::operator()(boost::corosio::detail::select_descriptor*) const :300 7x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_datagram_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_datagram_socket*)&&)::'lambda'(boost::corosio::detail::select_local_datagram_socket*)::operator()(boost::corosio::detail::select_local_datagram_socket*) const :300 2x 100.0% 15.6% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)&&)::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)::operator()(boost::corosio::detail::select_local_stream_acceptor*) const :300 1x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_socket*)&&)::'lambda'(boost::corosio::detail::select_local_stream_socket*)::operator()(boost::corosio::detail::select_local_stream_socket*) const :300 6x 0.0% 0.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_acceptor*)&&)::'lambda'(boost::corosio::detail::select_tcp_acceptor*)::operator()(boost::corosio::detail::select_tcp_acceptor*) const :300 411x 100.0% 59.4% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_socket*)&&)::'lambda'(boost::corosio::detail::select_tcp_socket*)::operator()(boost::corosio::detail::select_tcp_socket*) const :300 823x 100.0% 25.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_udp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_udp_socket*)&&)::'lambda'(boost::corosio::detail::select_udp_socket*)::operator()(boost::corosio::detail::select_udp_socket*) const :300 4x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::shutdown<boost::corosio::detail::timer_service::shutdown()::'lambda'(boost::corosio::detail::timer::implementation*)>(boost::corosio::detail::timer_service::shutdown()::'lambda'(boost::corosio::detail::timer::implementation*)&&)::'lambda'(boost::corosio::detail::timer::implementation*)::operator()(boost::corosio::detail::timer::implementation*) const :300 3250x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&)::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::pool_impl*) const :303 1x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&)::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::pool_impl*) const :303 2x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::pool_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda1'(boost::corosio::detail::(anonymous namespace)::pool_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda1'(boost::corosio::detail::(anonymous namespace)::pool_impl*)&&)::'lambda0'(boost::corosio::detail::(anonymous namespace)::pool_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::pool_impl*) const :303 1x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_derived>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)&&)::'lambda0'(boost::corosio::detail::(anonymous namespace)::self_ref_derived*)::operator()(boost::corosio::detail::(anonymous namespace)::self_ref_derived*) const :303 1x 100.0% 80.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::shutdown<boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)>(boost::corosio::detail::object_pool_test::run()::'lambda'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)&&)::'lambda0'(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)::operator()(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) const :303 1x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_descriptor>::shutdown<boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::kqueue_descriptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_descriptor>::shutdown()::'lambda'(boost::corosio::detail::kqueue_descriptor*)>(boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::kqueue_descriptor_service, boost::corosio::detail::kqueue_traits, boost::corosio::detail::kqueue_descriptor>::shutdown()::'lambda'(boost::corosio::detail::kqueue_descriptor*)&&)::'lambda0'(boost::corosio::detail::kqueue_descriptor*)::operator()(boost::corosio::detail::kqueue_descriptor*) const :303 13x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_datagram_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_datagram_socket*)&&)::'lambda0'(boost::corosio::detail::kqueue_local_datagram_socket*)::operator()(boost::corosio::detail::kqueue_local_datagram_socket*) const :303 9x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_acceptor, boost::corosio::detail::kqueue_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_acceptor*)&&)::'lambda0'(boost::corosio::detail::kqueue_local_stream_acceptor*)::operator()(boost::corosio::detail::kqueue_local_stream_acceptor*) const :303 2x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_local_stream_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_local_stream_socket*)&&)::'lambda0'(boost::corosio::detail::kqueue_local_stream_socket*)::operator()(boost::corosio::detail::kqueue_local_stream_socket*) const :303 11x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::kqueue_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_acceptor, boost::corosio::detail::kqueue_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_acceptor*)&&)::'lambda0'(boost::corosio::detail::kqueue_tcp_acceptor*)::operator()(boost::corosio::detail::kqueue_tcp_acceptor*) const :303 416x 100.0% 50.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_tcp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_tcp_socket*)&&)::'lambda0'(boost::corosio::detail::kqueue_tcp_socket*)::operator()(boost::corosio::detail::kqueue_tcp_socket*) const :303 944x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::kqueue_udp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_udp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::kqueue_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::kqueue_scheduler, boost::corosio::detail::kqueue_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::kqueue_udp_socket*)&&)::'lambda0'(boost::corosio::detail::kqueue_udp_socket*)::operator()(boost::corosio::detail::kqueue_udp_socket*) const :303 6x 100.0% – 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_random_access_file>::shutdown<boost::corosio::detail::posix_random_access_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_random_access_file*)>(boost::corosio::detail::posix_random_access_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_random_access_file*)&&)::'lambda0'(boost::corosio::detail::posix_random_access_file*)::operator()(boost::corosio::detail::posix_random_access_file*) const :303 8x 100.0% 75.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_resolver>::shutdown<boost::corosio::detail::posix_resolver_service::shutdown()::'lambda'(boost::corosio::detail::posix_resolver*)>(boost::corosio::detail::posix_resolver_service::shutdown()::'lambda'(boost::corosio::detail::posix_resolver*)&&)::'lambda0'(boost::corosio::detail::posix_resolver*)::operator()(boost::corosio::detail::posix_resolver*) const :303 3x 100.0% 75.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_signal>::shutdown<boost::corosio::detail::posix_signal_service::shutdown()::'lambda'(boost::corosio::detail::posix_signal*)>(boost::corosio::detail::posix_signal_service::shutdown()::'lambda'(boost::corosio::detail::posix_signal*)&&)::'lambda0'(boost::corosio::detail::posix_signal*)::operator()(boost::corosio::detail::posix_signal*) const :303 3212x 100.0% 75.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::posix_stream_file>::shutdown<boost::corosio::detail::posix_stream_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_stream_file*)>(boost::corosio::detail::posix_stream_file_service::shutdown()::'lambda'(boost::corosio::detail::posix_stream_file*)&&)::'lambda0'(boost::corosio::detail::posix_stream_file*)::operator()(boost::corosio::detail::posix_stream_file*) const :303 4x 40.0% 25.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_descriptor>::shutdown<boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::select_descriptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_descriptor>::shutdown()::'lambda'(boost::corosio::detail::select_descriptor*)>(boost::corosio::detail::reactor_descriptor_service<boost::corosio::detail::select_descriptor_service, boost::corosio::detail::select_traits, boost::corosio::detail::select_descriptor>::shutdown()::'lambda'(boost::corosio::detail::select_descriptor*)&&)::'lambda0'(boost::corosio::detail::select_descriptor*)::operator()(boost::corosio::detail::select_descriptor*) const :303 7x 100.0% 75.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_datagram_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_datagram_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_datagram_socket*)&&)::'lambda0'(boost::corosio::detail::select_local_datagram_socket*)::operator()(boost::corosio::detail::select_local_datagram_socket*) const :303 2x 100.0% 23.4% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_acceptor*)&&)::'lambda0'(boost::corosio::detail::select_local_stream_acceptor*)::operator()(boost::corosio::detail::select_local_stream_acceptor*) const :303 1x 100.0% 75.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_local_stream_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::'lambda'(boost::corosio::detail::select_local_stream_socket*)&&)::'lambda0'(boost::corosio::detail::select_local_stream_socket*)::operator()(boost::corosio::detail::select_local_stream_socket*) const :303 6x 0.0% 0.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_acceptor>::shutdown<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_acceptor*)>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_acceptor*)&&)::'lambda0'(boost::corosio::detail::select_tcp_acceptor*)::operator()(boost::corosio::detail::select_tcp_acceptor*) const :303 411x 100.0% 75.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_tcp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_tcp_socket*)&&)::'lambda0'(boost::corosio::detail::select_tcp_socket*)::operator()(boost::corosio::detail::select_tcp_socket*) const :303 823x 40.0% 12.5% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::select_udp_socket>::shutdown<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_udp_socket*)>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::'lambda'(boost::corosio::detail::select_udp_socket*)&&)::'lambda0'(boost::corosio::detail::select_udp_socket*)::operator()(boost::corosio::detail::select_udp_socket*) const :303 4x 40.0% 25.0% 100.0% void boost::corosio::detail::object_pool<boost::corosio::detail::timer::implementation>::shutdown<boost::corosio::detail::timer_service::shutdown()::'lambda'(boost::corosio::detail::timer::implementation*)>(boost::corosio::detail::timer_service::shutdown()::'lambda'(boost::corosio::detail::timer::implementation*)&&)::'lambda0'(boost::corosio::detail::timer::implementation*)::operator()(boost::corosio::detail::timer::implementation*) const :303 3250x 100.0% 75.0% 100.0%
Line Branch TLA Hits Source Code
1 //
2 // Copyright (c) 2025 Steve Gerbino ([email protected])
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/cppalliance/corosio
8 //
9
10 #ifndef BOOST_COROSIO_DETAIL_OBJECT_POOL_HPP
11 #define BOOST_COROSIO_DETAIL_OBJECT_POOL_HPP
12
13 #include <boost/corosio/detail/config.hpp>
14 #include <boost/corosio/detail/intrusive.hpp>
15 #include <boost/corosio/detail/object_ref.hpp>
16 #include <atomic>
17 #include <cstddef>
18 #include <initializer_list>
19 #include <limits>
20 #include <mutex>
21 #include <utility>
22 #include <vector>
23
24 namespace boost::corosio::detail {
25
26 /** Per-service recycling pool for I/O implementations.
27
28 Replaces per-impl `shared_ptr` ownership: a service news an impl
29 once, then `recycle()` (the impl's `retire()` action) parks
30 it on the free list and `acquire()` hands it back out, so steady-state
31 construct/destroy allocates nothing. Unbounded; memory is released
32 only on pool destruction. Debug poisoning, where an impl does it,
33 happens in that impl's `retire()`, not here (the pool cannot know
34 which bytes are resettable).
35
36 A service tears down its impls by calling `shutdown()`, which
37 enters shutting-down mode and visits every live impl in one
38 critical section; subsequent zero-ref crossings delete instead of
39 recycling.
40
41 `adopt()` and `remove()` are protected ownership-transfer
42 primitives for sanctioned extensions — a derived pool exposing
43 them to a caller that tracks some of its live impls through its
44 own structure instead of this pool's `live_` list (the timer
45 service, via its expiry heap) — rather than part of the public
46 surface every ordinary service uses.
47
48 @par Thread Safety
49 Distinct objects: Safe. Shared objects: Safe; all operations lock
50 an internal mutex.
51 */
52 template<class Impl>
53 class object_pool
54 {
55 std::mutex mutex_;
56 intrusive_list<Impl> live_;
57 intrusive_list<Impl> free_;
58 5970x bool shutting_down_ = false;
59
60 /** Marks `refs_` on an impl currently parked in `free_`.
61
62 `intrusive_list::remove()` cannot distinguish "linked in
63 `free_`" from "linked in `live_`" by inspecting the node
64 alone — both lists share one `next_`/`prev_` pair per impl —
65 so `recycle()` cannot safely call `live_.remove()` on an impl
66 it does not already know is live. Stamping this sentinel into
67 `refs_` the moment an impl joins `free_`, and checking it
68 before touching either list, is what lets `recycle()` and
69 `remove()` tell the two cases apart in every build mode, not
70 just under asserts. `acquire()` always overwrites it with 1
71 before the impl is usable again.
72 */
73 static constexpr std::size_t pooled_sentinel = pooled_refs;
74
75 /// Check whether @p impl is parked in `free_` (`refs_` reads the
76 /// sentinel). Callers must check this before any list operation —
77 /// see the class-level comment on `pooled_sentinel`.
78 94483x static bool is_pooled(Impl const* impl) noexcept
79 {
80 94483x return impl->refs_.load(std::memory_order_relaxed) ==
81 pooled_sentinel;
82 }
83
84 protected:
85 /** Track a fresh or reset impl as live.
86
87 @pre @p impl is not parked in `free_` (`refs_` must not read
88 `pooled_sentinel`). The same list-corruption hazard
89 `recycle()`'s class-level comment documents applies here: a
90 free-listed impl pushed onto `live_` directly, bypassing
91 `acquire()`, would end up linked in both lists through one shared
92 `next_`/`prev_` pair.
93
94 @pre The caller is not racing `shutdown()`. Every caller adopts
95 while constructing an object (`acquire()`, or a derived pool's
96 cache handing a parked impl back out), and construction is
97 expected to stop before the service's own `shutdown()` runs;
98 this is checked only in debug builds because the failure mode
99 is a silently orphaned impl (no close callback), not memory
100 corruption.
101 */
102 29406x void adopt(Impl* impl)
103 {
104 29406x std::lock_guard lock(mutex_);
105
5/32
✗ Branch 0 not taken.
✓ Branch 1 taken 23999 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1503 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2305 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1445 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 154 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
29406x if (is_pooled(impl))
106 {
107
0/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ BOOST_COROSIO_ASSERT(false);
108 return;
109 }
110
5/64
✗ Branch 0 not taken.
✓ Branch 1 taken 23999 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1503 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2305 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1445 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 154 times.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
29406x BOOST_COROSIO_ASSERT(!shutting_down_);
111 29406x live_.push_back(impl);
112 29406x }
113
114 /** Unlink a live impl without recycling (ownership transfer).
115
116 Used by a caller that is taking an impl out of this pool's
117 bookkeeping entirely (a thread-local cache slot, a direct
118 delete during shutdown) rather than parking it on `free_`.
119
120 @pre @p impl is not parked in `free_` (`refs_` must not read
121 `pooled_sentinel`). The same list-corruption hazard
122 `recycle()`'s class-level comment documents applies here: a
123 free-listed impl would be spliced out using `live_`'s
124 boundary pointers instead of `free_`'s.
125
126 @return True if @p impl was linked in `live_` and has now
127 been removed; false if it was already detached.
128 */
129 14210x bool remove(Impl* impl) noexcept
130 {
131
1/2
✓ Branch 0 taken 14210 times.
✗ Branch 1 not taken.
14210x std::lock_guard lock(mutex_);
132
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14210 times.
14210x if (is_pooled(impl))
133 {
134
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ BOOST_COROSIO_ASSERT(false);
135 return false;
136 }
137 14210x return live_.remove(impl);
138 14210x }
139
140 public:
141 /** Destroy the pool, freeing every impl still parked or live.
142
143 A live impl is deleted whatever its count. Keepalives it holds
144 on itself (an embedded op's `object_ref`) are released by its
145 own destructor; the count is pinned first so none of those
146 releases reaches zero and calls `retire()` on an object that
147 is already being destroyed.
148
149 @pre `shutdown()` has already run, or no impls are live.
150 */
151 11061x ~object_pool()
152 5090x {
153
11/96
✓ Branch 0 taken 3102 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 3112 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1064 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1064 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 679 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 679 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1012 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1012 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✓ Branch 66 taken 104 times.
✗ Branch 67 not taken.
✓ Branch 68 taken 104 times.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
5971x BOOST_COROSIO_ASSERT(shutting_down_ || live_.empty());
154
10/32
✓ Branch 0 taken 6224 times.
✓ Branch 1 taken 3112 times.
✓ Branch 2 taken 2128 times.
✓ Branch 3 taken 1064 times.
✓ Branch 4 taken 1358 times.
✓ Branch 5 taken 679 times.
✓ Branch 6 taken 2024 times.
✓ Branch 7 taken 1012 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 208 times.
✓ Branch 23 taken 104 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
17913x for (auto* list : {&free_, &live_})
155 {
156
10/32
✓ Branch 0 taken 5586 times.
✓ Branch 1 taken 6224 times.
✓ Branch 2 taken 1076 times.
✓ Branch 3 taken 2128 times.
✓ Branch 4 taken 1470 times.
✓ Branch 5 taken 1358 times.
✓ Branch 6 taken 1029 times.
✓ Branch 7 taken 2024 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 150 times.
✓ Branch 23 taken 208 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
21253x while (auto* impl = list->pop_front())
157 {
158 9311x impl->refs_.store(pooled_sentinel, std::memory_order_relaxed);
159
5/32
✗ Branch 0 not taken.
✓ Branch 1 taken 5586 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1076 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1470 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1029 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 150 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
9311x delete impl;
160 }
161 }
162 11061x }
163
164 17029x object_pool() = default;
165 object_pool(object_pool const&) = delete;
166 object_pool& operator=(object_pool const&) = delete;
167
168 /** Pop-or-create an impl with the acquisition protocol applied.
169
170 Recycled impls are `reuse()`-reset and their reference count
171 restored from the pooled sentinel; fresh impls are constructed
172 in place from `args` on the cold path. Either way the impl is
173 adopted as live. This is the sequence every service's
174 `construct()` used to hand-roll. Making the pool itself the
175 only place that calls `new Impl` gives the whole library one
176 audit point for allocation policy.
177
178 @pre Not called concurrently with, or after, `shutdown()` on
179 this pool. Every caller reaches this through a service's
180 `construct()`, and service shutdown order guarantees no
181 `construct()` outlives that service's own `shutdown()`; the
182 window is only asserted in debug builds (see `adopt()`)
183 because the failure mode is an orphaned impl, not corruption.
184
185 @param args Constructor arguments for `Impl` (cold path only).
186
187 @return The acquired impl, `refs_ == 1`, tracked live.
188 */
189 template<class... Args>
190 54568x Impl* acquire(Args&&... args)
191 {
192 Impl* impl;
193 {
194 54568x std::lock_guard lock(mutex_);
195
5/64
✓ Branch 0 taken 37827 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2966 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 11718 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1870 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✓ Branch 44 taken 187 times.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
54568x BOOST_COROSIO_ASSERT(!shutting_down_);
196 54568x impl = free_.pop_front();
197
10/32
✓ Branch 0 taken 13471 times.
✓ Branch 1 taken 24356 times.
✓ Branch 2 taken 1503 times.
✓ Branch 3 taken 1463 times.
✓ Branch 4 taken 2305 times.
✓ Branch 5 taken 9413 times.
✓ Branch 6 taken 1445 times.
✓ Branch 7 taken 425 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 154 times.
✓ Branch 23 taken 33 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
54568x if (impl)
198 {
199 35690x impl->refs_.store(1, std::memory_order_relaxed);
200 35690x live_.push_back(impl);
201 35690x }
202 54568x }
203 // reuse() runs unlocked: acquire()'s precondition excludes a
204 // concurrent shutdown() visiting the impl mid-reset.
205
10/32
✓ Branch 0 taken 24349 times.
✓ Branch 1 taken 13478 times.
✓ Branch 2 taken 1463 times.
✓ Branch 3 taken 1503 times.
✓ Branch 4 taken 9413 times.
✓ Branch 5 taken 2305 times.
✓ Branch 6 taken 425 times.
✓ Branch 7 taken 1445 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 33 times.
✓ Branch 23 taken 154 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
54568x if (impl)
206 {
207 35683x impl->reuse();
208 35683x return impl;
209 }
210
3/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
18885x impl = new Impl(std::forward<Args>(args)...);
211 18885x adopt(impl);
212 18885x return impl;
213 54568x }
214
215 /** Move a zero-ref impl from live to the free list.
216
217 Called from `retire()`, possibly on a scheduler thread.
218 Deletes instead when shutting down. The impl must not be
219 touched after this returns.
220
221 Two accounting bugs are possible here, neither from this
222 pool's own bookkeeping but from a caller's refcounting (e.g.
223 a duplicate `retire()` for one zero-crossing). Both are
224 made safe in every build mode, not just under asserts, because
225 neither can be told apart from the correct case by a
226 `BOOST_COROSIO_ASSERT` alone that still runs the list
227 operations around it:
228
229 - `impl` is already parked in `free_` — the list-corruption
230 hazard the class-level `pooled_sentinel` comment documents.
231 The `is_pooled()` check runs first and returns before either
232 list is touched.
233 - `impl` is fully detached from `live_` and is not the
234 sentinel (not shutting down): `live_.remove()` correctly
235 returns false, but then the impl is reachable through
236 neither `acquire()` nor `shutdown()`'s visit while still
237 allocated — stranded. Deleted instead of left to leak.
238
239 While shutting down, an impl that is no longer in `live_` is
240 left alone rather than deleted: something else already took
241 it out of the pool's bookkeeping (a derived pool's owner, or a
242 duplicate retirement of an impl already deleted), and deleting
243 it again here could be a double free.
244 */
245 50867x void recycle(Impl* impl)
246 {
247 50867x bool do_delete = false;
248 {
249 50867x std::lock_guard lock(mutex_);
250
5/32
✗ Branch 0 not taken.
✓ Branch 1 taken 34128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2965 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 11717 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1870 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 187 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
50867x if (is_pooled(impl))
251 {
252
0/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ BOOST_COROSIO_ASSERT(false);
253 return;
254 }
255
256 50867x bool const was_live = live_.remove(impl);
257
10/32
✓ Branch 0 taken 4204 times.
✓ Branch 1 taken 29924 times.
✓ Branch 2 taken 427 times.
✓ Branch 3 taken 2538 times.
✓ Branch 4 taken 835 times.
✓ Branch 5 taken 10882 times.
✓ Branch 6 taken 416 times.
✓ Branch 7 taken 1454 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 4 times.
✓ Branch 23 taken 183 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
50867x if (shutting_down_)
258 {
259 5886x do_delete = was_live;
260 5886x }
261
5/32
✗ Branch 0 not taken.
✓ Branch 1 taken 29924 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2538 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10882 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1454 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 183 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
44981x else if (was_live)
262 {
263 44981x impl->refs_.store(
264 pooled_sentinel, std::memory_order_relaxed);
265 // LIFO: the most recently retired impl is the
266 // cache-warmest candidate for the next acquire().
267 44981x free_.push_front(impl);
268 44981x }
269 else
270 {
271
0/32
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ BOOST_COROSIO_ASSERT(false);
272 do_delete = true;
273 }
274 50867x }
275
10/32
✓ Branch 0 taken 29924 times.
✓ Branch 1 taken 4204 times.
✓ Branch 2 taken 2538 times.
✓ Branch 3 taken 427 times.
✓ Branch 4 taken 10882 times.
✓ Branch 5 taken 835 times.
✓ Branch 6 taken 1454 times.
✓ Branch 7 taken 416 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 183 times.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
50867x if (do_delete)
276
5/32
✗ Branch 0 not taken.
✓ Branch 1 taken 4204 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 427 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 835 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 416 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
5886x delete impl;
277 50867x }
278
279 /** Enter shutdown mode and visit every live impl.
280
281 Sets shutting-down (subsequent zero-crossings delete instead
282 of recycling) and runs `f` on each live impl, all under one
283 critical section. Each visited impl is pinned with a reference
284 for the call and released after the critical section ends, so
285 `f` may hold on to it; an impl whose count already reached zero
286 is retiring and is skipped rather than revived.
287
288 @note The callback runs under the pool's non-recursive mutex;
289 it must not call recycle(), adopt(), or remove() on this pool.
290 */
291 template<class F>
292 5961x void shutdown(F&& f)
293 {
294 5961x std::vector<Impl*> pinned;
295 {
296
6/32
✓ Branch 0 taken 3100 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1064 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 679 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1013 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 104 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
5961x std::lock_guard lock(mutex_);
297 5961x shutting_down_ = true;
298 // Sized before any pin, so a failure here leaves none held.
299 5961x std::size_t n = 0;
300
10/40
✓ Branch 0 taken 3099 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 1 time.
✓ Branch 2 taken 1063 times.
✗ Branch 3 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 4 taken 678 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 6 taken 1012 times.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 104 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
15099x live_.for_each([&](Impl*) { ++n; });
301
6/32
✓ Branch 0 taken 3099 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1064 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 679 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1013 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 104 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
5960x pinned.reserve(n);
302
14/64
✓ Branch 0 taken 3100 times.
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 3100 times.
✓ Branch 3 taken 1 time.
✓ Branch 4 taken 1064 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1064 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 679 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 679 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1013 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1013 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✓ Branch 44 taken 104 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 104 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
11920x live_.for_each(
303 15098x [&](Impl* impl)
304 {
305
7/32
✗ Branch 0 not taken.
✓ Branch 1 taken 7451 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 428 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 836 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 417 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
9138x if (try_acquire(impl))
306 {
307 9137x pinned.push_back(impl);
308 9137x f(impl);
309 9137x }
310 9138x });
311 5963x }
312
12/32
✓ Branch 0 taken 7451 times.
✓ Branch 1 taken 3100 times.
✓ Branch 2 taken 428 times.
✓ Branch 3 taken 1064 times.
✓ Branch 4 taken 836 times.
✓ Branch 5 taken 679 times.
✓ Branch 6 taken 417 times.
✓ Branch 7 taken 1013 times.
✓ Branch 8 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 4 times.
✓ Branch 23 taken 104 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
15098x for (auto* impl : pinned)
313 9137x release(impl);
314 5963x }
315 };
316
317 } // namespace boost::corosio::detail
318
319 #endif
320