passenger 6.0.22 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +59 -1
- data/Rakefile +13 -2
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +18 -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 +24 -13
- data/package.json +1 -1
- data/passenger.gemspec +4 -2
- data/resources/templates/standalone/server.erb +1 -0
- 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 +9 -1
- 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 -4
- 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 +8 -3
- data/src/agent/Core/Controller/CheckoutSession.cpp +24 -1
- data/src/agent/Core/Controller/Config.h +5 -1
- data/src/agent/Core/Controller.h +1 -0
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/OptionParser.h +3 -0
- data/src/agent/Core/SpawningKit/ErrorRenderer.h +5 -0
- 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 +2 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +15 -0
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
- data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +13 -0
- data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +16 -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/LString.h +4 -0
- 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/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
- data/src/nginx_module/Configuration.c +7 -2
- data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +6 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +14 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
- data/src/ruby_native_extension/passenger_native_support.c +1 -0
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +5 -0
- 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/nginx/config_options.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
- data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +30 -56
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
- data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +39 -10
@@ -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
|
*
|