passenger 6.0.23 → 6.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +26 -1
- data/Rakefile +7 -3
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +17 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +4 -12
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +7 -3
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +21 -8
@@ -1,6 +1,6 @@
|
|
1
1
|
//
|
2
|
-
//
|
3
|
-
//
|
2
|
+
// co_composed.hpp
|
3
|
+
// ~~~~~~~~~~~~~~~
|
4
4
|
//
|
5
5
|
// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
6
|
//
|
@@ -8,14 +8,17 @@
|
|
8
8
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
9
|
//
|
10
10
|
|
11
|
-
#ifndef
|
12
|
-
#define
|
11
|
+
#ifndef BOOST_ASIO_CO_COMPOSED_HPP
|
12
|
+
#define BOOST_ASIO_CO_COMPOSED_HPP
|
13
13
|
|
14
14
|
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
15
15
|
# pragma once
|
16
16
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
17
|
|
18
18
|
#include <boost/asio/detail/config.hpp>
|
19
|
+
|
20
|
+
#if defined(BOOST_ASIO_HAS_CO_AWAIT) || defined(GENERATING_DOCUMENTATION)
|
21
|
+
|
19
22
|
#include <new>
|
20
23
|
#include <tuple>
|
21
24
|
#include <variant>
|
@@ -45,7 +48,6 @@
|
|
45
48
|
|
46
49
|
namespace boost {
|
47
50
|
namespace asio {
|
48
|
-
namespace experimental {
|
49
51
|
namespace detail {
|
50
52
|
|
51
53
|
#if defined(BOOST_ASIO_HAS_STD_COROUTINE)
|
@@ -75,7 +77,7 @@ class co_composed_handler_base;
|
|
75
77
|
template <typename Executors, typename Handler, typename Return>
|
76
78
|
class co_composed_promise;
|
77
79
|
|
78
|
-
template <
|
80
|
+
template <BOOST_ASIO_COMPLETION_SIGNATURE... Signatures>
|
79
81
|
class co_composed_returns
|
80
82
|
{
|
81
83
|
};
|
@@ -91,7 +93,7 @@ struct co_composed_completion : std::tuple<T&&...>
|
|
91
93
|
{
|
92
94
|
template <typename... U>
|
93
95
|
co_composed_completion(U&&... u) noexcept
|
94
|
-
: std::tuple<T&&...>(
|
96
|
+
: std::tuple<T&&...>(static_cast<U&&>(u)...)
|
95
97
|
{
|
96
98
|
}
|
97
99
|
};
|
@@ -313,8 +315,8 @@ public:
|
|
313
315
|
(get_associated_cancellation_slot)(
|
314
316
|
static_cast<co_composed_state<Executors, Handler, Return>*>(
|
315
317
|
this)->handler()),
|
316
|
-
|
317
|
-
|
318
|
+
static_cast<InFilter&&>(in_filter),
|
319
|
+
static_cast<OutFilter&&>(out_filter));
|
318
320
|
}
|
319
321
|
|
320
322
|
cancellation_type_t cancelled() const noexcept
|
@@ -469,7 +471,7 @@ public:
|
|
469
471
|
co_composed_state(composed_io_executors<Executors>&& executors,
|
470
472
|
H&& h, co_composed_on_suspend& on_suspend)
|
471
473
|
: work_(std::move(executors)),
|
472
|
-
handler_(
|
474
|
+
handler_(static_cast<H&&>(h)),
|
473
475
|
on_suspend_(&on_suspend)
|
474
476
|
{
|
475
477
|
this->reset_cancellation_state(enable_terminal_cancellation());
|
@@ -482,9 +484,9 @@ public:
|
|
482
484
|
|
483
485
|
template <typename... Args>
|
484
486
|
[[nodiscard]] co_composed_completion<Args...> complete(Args&&... args)
|
485
|
-
requires requires { declval<Handler>()(
|
487
|
+
requires requires { declval<Handler>()(static_cast<Args&&>(args)...); }
|
486
488
|
{
|
487
|
-
return co_composed_completion<Args...>(
|
489
|
+
return co_composed_completion<Args...>(static_cast<Args&&>(args)...);
|
488
490
|
}
|
489
491
|
|
490
492
|
const Handler& handler() const noexcept
|
@@ -593,7 +595,7 @@ public:
|
|
593
595
|
template <typename... T>
|
594
596
|
void operator()(T&&... args)
|
595
597
|
{
|
596
|
-
result_type result(
|
598
|
+
result_type result(static_cast<T&&>(args)...);
|
597
599
|
this->resume(&result);
|
598
600
|
}
|
599
601
|
|
@@ -625,7 +627,7 @@ public:
|
|
625
627
|
template <typename... T>
|
626
628
|
void operator()(const boost::system::error_code& ec, T&&... args)
|
627
629
|
{
|
628
|
-
result_type result(ec, args_type(
|
630
|
+
result_type result(ec, args_type(static_cast<T&&>(args)...));
|
629
631
|
this->resume(&result);
|
630
632
|
}
|
631
633
|
|
@@ -658,7 +660,7 @@ public:
|
|
658
660
|
template <typename... T>
|
659
661
|
void operator()(std::exception_ptr ex, T&&... args)
|
660
662
|
{
|
661
|
-
result_type result(std::move(ex), args_type(
|
663
|
+
result_type result(std::move(ex), args_type(static_cast<T&&>(args)...));
|
662
664
|
this->resume(&result);
|
663
665
|
}
|
664
666
|
|
@@ -864,7 +866,7 @@ public:
|
|
864
866
|
# endif // defined(BOOST_ASIO_HAS_SOURCE_LOCATION)
|
865
867
|
#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
|
866
868
|
)
|
867
|
-
: op_(
|
869
|
+
: op_(static_cast<Op&&>(op)),
|
868
870
|
promise_(promise)
|
869
871
|
#if defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
|
870
872
|
# if defined(BOOST_ASIO_HAS_SOURCE_LOCATION)
|
@@ -895,7 +897,7 @@ public:
|
|
895
897
|
static_cast<awaitable*>(p)->location_.function_name()));
|
896
898
|
# endif // defined(BOOST_ASIO_HAS_SOURCE_LOCATION)
|
897
899
|
#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
|
898
|
-
|
900
|
+
static_cast<Op&&>(static_cast<awaitable*>(p)->op_)(
|
899
901
|
co_composed_handler<Executors, Handler,
|
900
902
|
Return, completion_signature_of_t<Op>>(
|
901
903
|
static_cast<awaitable*>(p)->promise_));
|
@@ -920,7 +922,7 @@ public:
|
|
920
922
|
};
|
921
923
|
|
922
924
|
state_.check_for_cancellation_on_transform();
|
923
|
-
return awaitable{
|
925
|
+
return awaitable{static_cast<Op&&>(op), *this
|
924
926
|
#if defined(BOOST_ASIO_ENABLE_HANDLER_TRACKING)
|
925
927
|
# if defined(BOOST_ASIO_HAS_SOURCE_LOCATION)
|
926
928
|
, location
|
@@ -961,7 +963,7 @@ public:
|
|
961
963
|
|
962
964
|
Handler handler(std::move(a.promise_.state_.handler_));
|
963
965
|
std::tuple<decay_t<Args>...> result(
|
964
|
-
std::move(static_cast<std::tuple<Args
|
966
|
+
std::move(static_cast<std::tuple<Args&&...>&>(a.result_)));
|
965
967
|
|
966
968
|
co_composed_handler_base<Executors, Handler,
|
967
969
|
Return>(std::move(composed_handler));
|
@@ -1014,7 +1016,7 @@ public:
|
|
1014
1016
|
|
1015
1017
|
template <typename I>
|
1016
1018
|
initiate_co_composed(I&& impl, composed_io_executors<Executors>&& executors)
|
1017
|
-
: implementation_(
|
1019
|
+
: implementation_(static_cast<I&&>(impl)),
|
1018
1020
|
executors_(std::move(executors))
|
1019
1021
|
{
|
1020
1022
|
}
|
@@ -1032,8 +1034,8 @@ public:
|
|
1032
1034
|
co_composed_on_suspend on_suspend{};
|
1033
1035
|
implementation_(
|
1034
1036
|
co_composed_state<Executors, handler_type, returns_type>(
|
1035
|
-
executors_,
|
1036
|
-
|
1037
|
+
executors_, static_cast<Handler&&>(handler), on_suspend),
|
1038
|
+
static_cast<InitArgs&&>(init_args)...);
|
1037
1039
|
if (on_suspend.fn_)
|
1038
1040
|
on_suspend.fn_(on_suspend.arg_);
|
1039
1041
|
}
|
@@ -1046,8 +1048,8 @@ public:
|
|
1046
1048
|
co_composed_on_suspend on_suspend{};
|
1047
1049
|
std::move(implementation_)(
|
1048
1050
|
co_composed_state<Executors, handler_type, returns_type>(
|
1049
|
-
std::move(executors_),
|
1050
|
-
|
1051
|
+
std::move(executors_), static_cast<Handler&&>(handler), on_suspend),
|
1052
|
+
static_cast<InitArgs&&>(init_args)...);
|
1051
1053
|
if (on_suspend.fn_)
|
1052
1054
|
on_suspend.fn_(on_suspend.arg_);
|
1053
1055
|
}
|
@@ -1057,46 +1059,74 @@ private:
|
|
1057
1059
|
composed_io_executors<Executors> executors_;
|
1058
1060
|
};
|
1059
1061
|
|
1062
|
+
template <typename Implementation, typename... Signatures>
|
1063
|
+
class initiate_co_composed<Implementation, void(), Signatures...>
|
1064
|
+
{
|
1065
|
+
public:
|
1066
|
+
template <typename I>
|
1067
|
+
initiate_co_composed(I&& impl, composed_io_executors<void()>&&)
|
1068
|
+
: implementation_(static_cast<I&&>(impl))
|
1069
|
+
{
|
1070
|
+
}
|
1071
|
+
|
1072
|
+
template <typename Handler, typename... InitArgs>
|
1073
|
+
void operator()(Handler&& handler, InitArgs&&... init_args) const &
|
1074
|
+
{
|
1075
|
+
using handler_type = decay_t<Handler>;
|
1076
|
+
using returns_type = co_composed_returns<Signatures...>;
|
1077
|
+
co_composed_on_suspend on_suspend{};
|
1078
|
+
implementation_(
|
1079
|
+
co_composed_state<void(), handler_type, returns_type>(
|
1080
|
+
composed_io_executors<void()>(),
|
1081
|
+
static_cast<Handler&&>(handler), on_suspend),
|
1082
|
+
static_cast<InitArgs&&>(init_args)...);
|
1083
|
+
if (on_suspend.fn_)
|
1084
|
+
on_suspend.fn_(on_suspend.arg_);
|
1085
|
+
}
|
1086
|
+
|
1087
|
+
template <typename Handler, typename... InitArgs>
|
1088
|
+
void operator()(Handler&& handler, InitArgs&&... init_args) &&
|
1089
|
+
{
|
1090
|
+
using handler_type = decay_t<Handler>;
|
1091
|
+
using returns_type = co_composed_returns<Signatures...>;
|
1092
|
+
co_composed_on_suspend on_suspend{};
|
1093
|
+
std::move(implementation_)(
|
1094
|
+
co_composed_state<void(), handler_type, returns_type>(
|
1095
|
+
composed_io_executors<void()>(),
|
1096
|
+
static_cast<Handler&&>(handler), on_suspend),
|
1097
|
+
static_cast<InitArgs&&>(init_args)...);
|
1098
|
+
if (on_suspend.fn_)
|
1099
|
+
on_suspend.fn_(on_suspend.arg_);
|
1100
|
+
}
|
1101
|
+
|
1102
|
+
private:
|
1103
|
+
Implementation implementation_;
|
1104
|
+
};
|
1105
|
+
|
1060
1106
|
template <typename... Signatures, typename Implementation, typename Executors>
|
1061
|
-
inline initiate_co_composed<Implementation
|
1107
|
+
inline initiate_co_composed<decay_t<Implementation>, Executors, Signatures...>
|
1062
1108
|
make_initiate_co_composed(Implementation&& implementation,
|
1063
1109
|
composed_io_executors<Executors>&& executors)
|
1064
1110
|
{
|
1065
1111
|
return initiate_co_composed<
|
1066
1112
|
decay_t<Implementation>, Executors, Signatures...>(
|
1067
|
-
|
1113
|
+
static_cast<Implementation&&>(implementation), std::move(executors));
|
1068
1114
|
}
|
1069
1115
|
|
1070
1116
|
} // namespace detail
|
1071
1117
|
|
1072
|
-
template <completion_signature... Signatures,
|
1073
|
-
typename Implementation, typename... IoObjectsOrExecutors>
|
1074
|
-
inline auto co_composed(Implementation&& implementation,
|
1075
|
-
IoObjectsOrExecutors&&... io_objects_or_executors)
|
1076
|
-
{
|
1077
|
-
return detail::make_initiate_co_composed<Signatures...>(
|
1078
|
-
std::forward<Implementation>(implementation),
|
1079
|
-
detail::make_composed_io_executors(
|
1080
|
-
detail::get_composed_io_executor(
|
1081
|
-
std::forward<IoObjectsOrExecutors>(
|
1082
|
-
io_objects_or_executors))...));
|
1083
|
-
}
|
1084
|
-
|
1085
|
-
} // namespace experimental
|
1086
|
-
|
1087
1118
|
#if !defined(GENERATING_DOCUMENTATION)
|
1088
1119
|
|
1089
1120
|
template <template <typename, typename> class Associator,
|
1090
1121
|
typename Executors, typename Handler, typename Return,
|
1091
1122
|
typename Signature, typename DefaultCandidate>
|
1092
1123
|
struct associator<Associator,
|
1093
|
-
|
1094
|
-
Executors, Handler, Return, Signature>,
|
1124
|
+
detail::co_composed_handler<Executors, Handler, Return, Signature>,
|
1095
1125
|
DefaultCandidate>
|
1096
1126
|
: Associator<Handler, DefaultCandidate>
|
1097
1127
|
{
|
1098
1128
|
static typename Associator<Handler, DefaultCandidate>::type get(
|
1099
|
-
const
|
1129
|
+
const detail::co_composed_handler<
|
1100
1130
|
Executors, Handler, Return, Signature>& h) noexcept
|
1101
1131
|
{
|
1102
1132
|
return Associator<Handler, DefaultCandidate>::get(
|
@@ -1104,7 +1134,7 @@ struct associator<Associator,
|
|
1104
1134
|
}
|
1105
1135
|
|
1106
1136
|
static auto get(
|
1107
|
-
const
|
1137
|
+
const detail::co_composed_handler<
|
1108
1138
|
Executors, Handler, Return, Signature>& h,
|
1109
1139
|
const DefaultCandidate& c) noexcept
|
1110
1140
|
-> decltype(
|
@@ -1131,37 +1161,28 @@ namespace std { namespace experimental {
|
|
1131
1161
|
template <typename C, typename Executors,
|
1132
1162
|
typename Handler, typename Return, typename... Args>
|
1133
1163
|
struct coroutine_traits<void, C&,
|
1134
|
-
boost::asio::
|
1135
|
-
Executors, Handler, Return>,
|
1136
|
-
Args...>
|
1164
|
+
boost::asio::detail::co_composed_state<Executors, Handler, Return>, Args...>
|
1137
1165
|
{
|
1138
1166
|
using promise_type =
|
1139
|
-
boost::asio::
|
1140
|
-
Executors, Handler, Return>;
|
1167
|
+
boost::asio::detail::co_composed_promise<Executors, Handler, Return>;
|
1141
1168
|
};
|
1142
1169
|
|
1143
1170
|
template <typename C, typename Executors,
|
1144
1171
|
typename Handler, typename Return, typename... Args>
|
1145
1172
|
struct coroutine_traits<void, C&&,
|
1146
|
-
boost::asio::
|
1147
|
-
Executors, Handler, Return>,
|
1148
|
-
Args...>
|
1173
|
+
boost::asio::detail::co_composed_state<Executors, Handler, Return>, Args...>
|
1149
1174
|
{
|
1150
1175
|
using promise_type =
|
1151
|
-
boost::asio::
|
1152
|
-
Executors, Handler, Return>;
|
1176
|
+
boost::asio::detail::co_composed_promise<Executors, Handler, Return>;
|
1153
1177
|
};
|
1154
1178
|
|
1155
1179
|
template <typename Executors, typename Handler,
|
1156
1180
|
typename Return, typename... Args>
|
1157
1181
|
struct coroutine_traits<void,
|
1158
|
-
boost::asio::
|
1159
|
-
Executors, Handler, Return>,
|
1160
|
-
Args...>
|
1182
|
+
boost::asio::detail::co_composed_state<Executors, Handler, Return>, Args...>
|
1161
1183
|
{
|
1162
1184
|
using promise_type =
|
1163
|
-
boost::asio::
|
1164
|
-
Executors, Handler, Return>;
|
1185
|
+
boost::asio::detail::co_composed_promise<Executors, Handler, Return>;
|
1165
1186
|
};
|
1166
1187
|
|
1167
1188
|
# if defined(BOOST_ASIO_HAS_STD_COROUTINE)
|
@@ -1171,6 +1192,132 @@ struct coroutine_traits<void,
|
|
1171
1192
|
# endif // defined(BOOST_ASIO_HAS_STD_COROUTINE)
|
1172
1193
|
#endif // !defined(GENERATING_DOCUMENTATION)
|
1173
1194
|
|
1195
|
+
namespace boost {
|
1196
|
+
namespace asio {
|
1197
|
+
|
1198
|
+
/// Creates an initiation function object that may be used to launch a
|
1199
|
+
/// coroutine-based composed asynchronous operation.
|
1200
|
+
/**
|
1201
|
+
* The co_composed utility simplifies the implementation of composed
|
1202
|
+
* asynchronous operations by automatically adapting a coroutine to be an
|
1203
|
+
* initiation function object for use with @c async_initiate. When awaiting
|
1204
|
+
* asynchronous operations, the coroutine automatically uses a conforming
|
1205
|
+
* intermediate completion handler.
|
1206
|
+
*
|
1207
|
+
* @param implementation A function object that contains the coroutine-based
|
1208
|
+
* implementation of the composed asynchronous operation. The first argument to
|
1209
|
+
* the function object represents the state of the operation, and may be used
|
1210
|
+
* to test for cancellation. The remaining arguments are those passed to @c
|
1211
|
+
* async_initiate after the completion token.
|
1212
|
+
*
|
1213
|
+
* @param io_objects_or_executors Zero or more I/O objects or I/O executors for
|
1214
|
+
* which outstanding work must be maintained while the operation is incomplete.
|
1215
|
+
*
|
1216
|
+
* @par Per-Operation Cancellation
|
1217
|
+
* By default, terminal per-operation cancellation is enabled for composed
|
1218
|
+
* operations that use co_composed. To disable cancellation for the composed
|
1219
|
+
* operation, or to alter its supported cancellation types, call the state's
|
1220
|
+
* @c reset_cancellation_state function.
|
1221
|
+
*
|
1222
|
+
* @par Examples
|
1223
|
+
* The following example illustrates manual error handling and explicit checks
|
1224
|
+
* for cancellation. The completion handler is invoked via a @c co_yield to the
|
1225
|
+
* state's @c complete function, which never returns.
|
1226
|
+
*
|
1227
|
+
* @code template <typename CompletionToken>
|
1228
|
+
* auto async_echo(tcp::socket& socket,
|
1229
|
+
* CompletionToken&& token)
|
1230
|
+
* {
|
1231
|
+
* return boost::asio::async_initiate<
|
1232
|
+
* CompletionToken, void(boost::system::error_code)>(
|
1233
|
+
* boost::asio::co_composed(
|
1234
|
+
* [](auto state, tcp::socket& socket) -> void
|
1235
|
+
* {
|
1236
|
+
* state.reset_cancellation_state(
|
1237
|
+
* boost::asio::enable_terminal_cancellation());
|
1238
|
+
*
|
1239
|
+
* while (!state.cancelled())
|
1240
|
+
* {
|
1241
|
+
* char data[1024];
|
1242
|
+
* auto [e1, n1] =
|
1243
|
+
* co_await socket.async_read_some(
|
1244
|
+
* boost::asio::buffer(data));
|
1245
|
+
*
|
1246
|
+
* if (e1)
|
1247
|
+
* co_yield state.complete(e1);
|
1248
|
+
*
|
1249
|
+
* if (!!state.cancelled())
|
1250
|
+
* co_yield state.complete(
|
1251
|
+
* make_error_code(boost::asio::error::operation_aborted));
|
1252
|
+
*
|
1253
|
+
* auto [e2, n2] =
|
1254
|
+
* co_await boost::asio::async_write(socket,
|
1255
|
+
* boost::asio::buffer(data, n1));
|
1256
|
+
*
|
1257
|
+
* if (e2)
|
1258
|
+
* co_yield state.complete(e2);
|
1259
|
+
* }
|
1260
|
+
* }, socket),
|
1261
|
+
* token, std::ref(socket));
|
1262
|
+
* } @endcode
|
1263
|
+
*
|
1264
|
+
* This next example shows exception-based error handling and implicit checks
|
1265
|
+
* for cancellation. The completion handler is invoked after returning from the
|
1266
|
+
* coroutine via @c co_return. Valid @c co_return values are specified using
|
1267
|
+
* completion signatures passed to the @c co_composed function.
|
1268
|
+
*
|
1269
|
+
* @code template <typename CompletionToken>
|
1270
|
+
* auto async_echo(tcp::socket& socket,
|
1271
|
+
* CompletionToken&& token)
|
1272
|
+
* {
|
1273
|
+
* return boost::asio::async_initiate<
|
1274
|
+
* CompletionToken, void(boost::system::error_code)>(
|
1275
|
+
* boost::asio::co_composed<
|
1276
|
+
* void(boost::system::error_code)>(
|
1277
|
+
* [](auto state, tcp::socket& socket) -> void
|
1278
|
+
* {
|
1279
|
+
* try
|
1280
|
+
* {
|
1281
|
+
* state.throw_if_cancelled(true);
|
1282
|
+
* state.reset_cancellation_state(
|
1283
|
+
* boost::asio::enable_terminal_cancellation());
|
1284
|
+
*
|
1285
|
+
* for (;;)
|
1286
|
+
* {
|
1287
|
+
* char data[1024];
|
1288
|
+
* std::size_t n = co_await socket.async_read_some(
|
1289
|
+
* boost::asio::buffer(data));
|
1290
|
+
*
|
1291
|
+
* co_await boost::asio::async_write(socket,
|
1292
|
+
* boost::asio::buffer(data, n));
|
1293
|
+
* }
|
1294
|
+
* }
|
1295
|
+
* catch (const boost::system::system_error& e)
|
1296
|
+
* {
|
1297
|
+
* co_return {e.code()};
|
1298
|
+
* }
|
1299
|
+
* }, socket),
|
1300
|
+
* token, std::ref(socket));
|
1301
|
+
* } @endcode
|
1302
|
+
*/
|
1303
|
+
template <BOOST_ASIO_COMPLETION_SIGNATURE... Signatures,
|
1304
|
+
typename Implementation, typename... IoObjectsOrExecutors>
|
1305
|
+
inline auto co_composed(Implementation&& implementation,
|
1306
|
+
IoObjectsOrExecutors&&... io_objects_or_executors)
|
1307
|
+
{
|
1308
|
+
return detail::make_initiate_co_composed<Signatures...>(
|
1309
|
+
static_cast<Implementation&&>(implementation),
|
1310
|
+
detail::make_composed_io_executors(
|
1311
|
+
detail::get_composed_io_executor(
|
1312
|
+
static_cast<IoObjectsOrExecutors&&>(
|
1313
|
+
io_objects_or_executors))...));
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
} // namespace asio
|
1317
|
+
} // namespace boost
|
1318
|
+
|
1174
1319
|
#include <boost/asio/detail/pop_options.hpp>
|
1175
1320
|
|
1176
|
-
#endif //
|
1321
|
+
#endif // defined(BOOST_ASIO_HAS_CO_AWAIT) || defined(GENERATING_DOCUMENTATION)
|
1322
|
+
|
1323
|
+
#endif // BOOST_ASIO_CO_COMPOSED_HPP
|
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
#include <boost/asio/detail/config.hpp>
|
19
19
|
#include <cstddef>
|
20
|
+
#include <boost/asio/detail/type_traits.hpp>
|
21
|
+
#include <boost/system/error_code.hpp>
|
20
22
|
|
21
23
|
#include <boost/asio/detail/push_options.hpp>
|
22
24
|
|
@@ -98,8 +100,55 @@ private:
|
|
98
100
|
std::size_t size_;
|
99
101
|
};
|
100
102
|
|
103
|
+
template <typename T, typename = void>
|
104
|
+
struct is_completion_condition_helper : false_type
|
105
|
+
{
|
106
|
+
};
|
107
|
+
|
108
|
+
template <typename T>
|
109
|
+
struct is_completion_condition_helper<T,
|
110
|
+
enable_if_t<
|
111
|
+
is_same<
|
112
|
+
result_of_t<T(boost::system::error_code, std::size_t)>,
|
113
|
+
bool
|
114
|
+
>::value
|
115
|
+
>
|
116
|
+
> : true_type
|
117
|
+
{
|
118
|
+
};
|
119
|
+
|
120
|
+
template <typename T>
|
121
|
+
struct is_completion_condition_helper<T,
|
122
|
+
enable_if_t<
|
123
|
+
is_same<
|
124
|
+
result_of_t<T(boost::system::error_code, std::size_t)>,
|
125
|
+
std::size_t
|
126
|
+
>::value
|
127
|
+
>
|
128
|
+
> : true_type
|
129
|
+
{
|
130
|
+
};
|
131
|
+
|
101
132
|
} // namespace detail
|
102
133
|
|
134
|
+
#if defined(GENERATING_DOCUMENTATION)
|
135
|
+
|
136
|
+
/// Trait for determining whether a function object is a completion condition.
|
137
|
+
template <typename T>
|
138
|
+
struct is_completion_condition
|
139
|
+
{
|
140
|
+
static constexpr bool value = automatically_determined;
|
141
|
+
};
|
142
|
+
|
143
|
+
#else // defined(GENERATING_DOCUMENTATION)
|
144
|
+
|
145
|
+
template <typename T>
|
146
|
+
struct is_completion_condition : detail::is_completion_condition_helper<T>
|
147
|
+
{
|
148
|
+
};
|
149
|
+
|
150
|
+
#endif // defined(GENERATING_DOCUMENTATION)
|
151
|
+
|
103
152
|
/**
|
104
153
|
* @defgroup completion_condition Completion Condition Function Objects
|
105
154
|
*
|