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
@@ -16,10 +16,12 @@
|
|
16
16
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
17
|
|
18
18
|
#include <boost/asio/detail/config.hpp>
|
19
|
-
#include <boost/asio/detail/type_traits.hpp>
|
20
19
|
#include <boost/asio/associated_cancellation_slot.hpp>
|
20
|
+
#include <boost/asio/associated_executor.hpp>
|
21
21
|
#include <boost/asio/associator.hpp>
|
22
22
|
#include <boost/asio/async_result.hpp>
|
23
|
+
#include <boost/asio/detail/initiation_base.hpp>
|
24
|
+
#include <boost/asio/detail/type_traits.hpp>
|
23
25
|
|
24
26
|
#include <boost/asio/detail/push_options.hpp>
|
25
27
|
|
@@ -367,6 +369,46 @@ private:
|
|
367
369
|
T target_;
|
368
370
|
};
|
369
371
|
|
372
|
+
/// A function object type that adapts a @ref completion_token to specify that
|
373
|
+
/// the completion handler should have the supplied cancellation slot as its
|
374
|
+
/// associated cancellation slot.
|
375
|
+
/**
|
376
|
+
* May also be used directly as a completion token, in which case it adapts the
|
377
|
+
* asynchronous operation's default completion token (or boost::asio::deferred
|
378
|
+
* if no default is available).
|
379
|
+
*/
|
380
|
+
template <typename CancellationSlot>
|
381
|
+
struct partial_cancellation_slot_binder
|
382
|
+
{
|
383
|
+
/// Constructor that specifies associated cancellation slot.
|
384
|
+
explicit partial_cancellation_slot_binder(const CancellationSlot& ex)
|
385
|
+
: cancellation_slot_(ex)
|
386
|
+
{
|
387
|
+
}
|
388
|
+
|
389
|
+
/// Adapt a @ref completion_token to specify that the completion handler
|
390
|
+
/// should have the cancellation slot as its associated cancellation slot.
|
391
|
+
template <typename CompletionToken>
|
392
|
+
BOOST_ASIO_NODISCARD inline
|
393
|
+
constexpr cancellation_slot_binder<decay_t<CompletionToken>, CancellationSlot>
|
394
|
+
operator()(CompletionToken&& completion_token) const
|
395
|
+
{
|
396
|
+
return cancellation_slot_binder<decay_t<CompletionToken>, CancellationSlot>(
|
397
|
+
static_cast<CompletionToken&&>(completion_token), cancellation_slot_);
|
398
|
+
}
|
399
|
+
|
400
|
+
//private:
|
401
|
+
CancellationSlot cancellation_slot_;
|
402
|
+
};
|
403
|
+
|
404
|
+
/// Create a partial completion token that associates a cancellation slot.
|
405
|
+
template <typename CancellationSlot>
|
406
|
+
BOOST_ASIO_NODISCARD inline partial_cancellation_slot_binder<CancellationSlot>
|
407
|
+
bind_cancellation_slot(const CancellationSlot& ex)
|
408
|
+
{
|
409
|
+
return partial_cancellation_slot_binder<CancellationSlot>(ex);
|
410
|
+
}
|
411
|
+
|
370
412
|
/// Associate an object of type @c T with a cancellation slot of type
|
371
413
|
/// @c CancellationSlot.
|
372
414
|
template <typename CancellationSlot, typename T>
|
@@ -447,50 +489,51 @@ public:
|
|
447
489
|
}
|
448
490
|
|
449
491
|
template <typename Initiation>
|
450
|
-
struct init_wrapper
|
492
|
+
struct init_wrapper : detail::initiation_base<Initiation>
|
451
493
|
{
|
452
|
-
|
453
|
-
init_wrapper(const CancellationSlot& slot, Init&& init)
|
454
|
-
: slot_(slot),
|
455
|
-
initiation_(static_cast<Init&&>(init))
|
456
|
-
{
|
457
|
-
}
|
494
|
+
using detail::initiation_base<Initiation>::initiation_base;
|
458
495
|
|
459
496
|
template <typename Handler, typename... Args>
|
460
|
-
void operator()(Handler&& handler,
|
497
|
+
void operator()(Handler&& handler,
|
498
|
+
const CancellationSlot& slot, Args&&... args) &&
|
461
499
|
{
|
462
|
-
static_cast<Initiation&&>(
|
500
|
+
static_cast<Initiation&&>(*this)(
|
463
501
|
cancellation_slot_binder<decay_t<Handler>, CancellationSlot>(
|
464
|
-
|
502
|
+
slot, static_cast<Handler&&>(handler)),
|
465
503
|
static_cast<Args&&>(args)...);
|
466
504
|
}
|
467
505
|
|
468
506
|
template <typename Handler, typename... Args>
|
469
|
-
void operator()(Handler&& handler,
|
507
|
+
void operator()(Handler&& handler,
|
508
|
+
const CancellationSlot& slot, Args&&... args) const &
|
470
509
|
{
|
471
|
-
|
510
|
+
static_cast<const Initiation&>(*this)(
|
472
511
|
cancellation_slot_binder<decay_t<Handler>, CancellationSlot>(
|
473
|
-
|
512
|
+
slot, static_cast<Handler&&>(handler)),
|
474
513
|
static_cast<Args&&>(args)...);
|
475
514
|
}
|
476
|
-
|
477
|
-
CancellationSlot slot_;
|
478
|
-
Initiation initiation_;
|
479
515
|
};
|
480
516
|
|
481
517
|
template <typename Initiation, typename RawCompletionToken, typename... Args>
|
482
518
|
static auto initiate(Initiation&& initiation,
|
483
519
|
RawCompletionToken&& token, Args&&... args)
|
484
520
|
-> decltype(
|
485
|
-
async_initiate<
|
521
|
+
async_initiate<
|
522
|
+
conditional_t<
|
523
|
+
is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
|
524
|
+
Signature>(
|
486
525
|
declval<init_wrapper<decay_t<Initiation>>>(),
|
487
|
-
token.get(),
|
526
|
+
token.get(), token.get_cancellation_slot(),
|
527
|
+
static_cast<Args&&>(args)...))
|
488
528
|
{
|
489
|
-
return async_initiate<
|
529
|
+
return async_initiate<
|
530
|
+
conditional_t<
|
531
|
+
is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
|
532
|
+
Signature>(
|
490
533
|
init_wrapper<decay_t<Initiation>>(
|
491
|
-
token.get_cancellation_slot(),
|
492
534
|
static_cast<Initiation&&>(initiation)),
|
493
|
-
token.get(),
|
535
|
+
token.get(), token.get_cancellation_slot(),
|
536
|
+
static_cast<Args&&>(args)...);
|
494
537
|
}
|
495
538
|
|
496
539
|
private:
|
@@ -500,6 +543,32 @@ private:
|
|
500
543
|
async_result<T, Signature> target_;
|
501
544
|
};
|
502
545
|
|
546
|
+
template <typename CancellationSlot, typename... Signatures>
|
547
|
+
struct async_result<partial_cancellation_slot_binder<CancellationSlot>,
|
548
|
+
Signatures...>
|
549
|
+
{
|
550
|
+
template <typename Initiation, typename RawCompletionToken, typename... Args>
|
551
|
+
static auto initiate(Initiation&& initiation,
|
552
|
+
RawCompletionToken&& token, Args&&... args)
|
553
|
+
-> decltype(
|
554
|
+
async_initiate<Signatures...>(
|
555
|
+
static_cast<Initiation&&>(initiation),
|
556
|
+
cancellation_slot_binder<
|
557
|
+
default_completion_token_t<associated_executor_t<Initiation>>,
|
558
|
+
CancellationSlot>(token.cancellation_slot_,
|
559
|
+
default_completion_token_t<associated_executor_t<Initiation>>{}),
|
560
|
+
static_cast<Args&&>(args)...))
|
561
|
+
{
|
562
|
+
return async_initiate<Signatures...>(
|
563
|
+
static_cast<Initiation&&>(initiation),
|
564
|
+
cancellation_slot_binder<
|
565
|
+
default_completion_token_t<associated_executor_t<Initiation>>,
|
566
|
+
CancellationSlot>(token.cancellation_slot_,
|
567
|
+
default_completion_token_t<associated_executor_t<Initiation>>{}),
|
568
|
+
static_cast<Args&&>(args)...);
|
569
|
+
}
|
570
|
+
};
|
571
|
+
|
503
572
|
template <template <typename, typename> class Associator,
|
504
573
|
typename T, typename CancellationSlot, typename DefaultCandidate>
|
505
574
|
struct associator<Associator,
|
@@ -16,10 +16,11 @@
|
|
16
16
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
17
|
|
18
18
|
#include <boost/asio/detail/config.hpp>
|
19
|
-
#include <boost/asio/detail/type_traits.hpp>
|
20
19
|
#include <boost/asio/associated_executor.hpp>
|
21
20
|
#include <boost/asio/associator.hpp>
|
22
21
|
#include <boost/asio/async_result.hpp>
|
22
|
+
#include <boost/asio/detail/initiation_base.hpp>
|
23
|
+
#include <boost/asio/detail/type_traits.hpp>
|
23
24
|
#include <boost/asio/execution/executor.hpp>
|
24
25
|
#include <boost/asio/execution_context.hpp>
|
25
26
|
#include <boost/asio/is_executor.hpp>
|
@@ -395,6 +396,49 @@ private:
|
|
395
396
|
uses_executor<T, Executor>::value> base_type;
|
396
397
|
};
|
397
398
|
|
399
|
+
/// A function object type that adapts a @ref completion_token to specify that
|
400
|
+
/// the completion handler should have the supplied executor as its associated
|
401
|
+
/// executor.
|
402
|
+
/**
|
403
|
+
* May also be used directly as a completion token, in which case it adapts the
|
404
|
+
* asynchronous operation's default completion token (or boost::asio::deferred
|
405
|
+
* if no default is available).
|
406
|
+
*/
|
407
|
+
template <typename Executor>
|
408
|
+
struct partial_executor_binder
|
409
|
+
{
|
410
|
+
/// Constructor that specifies associated executor.
|
411
|
+
explicit partial_executor_binder(const Executor& ex)
|
412
|
+
: executor_(ex)
|
413
|
+
{
|
414
|
+
}
|
415
|
+
|
416
|
+
/// Adapt a @ref completion_token to specify that the completion handler
|
417
|
+
/// should have the executor as its associated executor.
|
418
|
+
template <typename CompletionToken>
|
419
|
+
BOOST_ASIO_NODISCARD inline
|
420
|
+
constexpr executor_binder<decay_t<CompletionToken>, Executor>
|
421
|
+
operator()(CompletionToken&& completion_token) const
|
422
|
+
{
|
423
|
+
return executor_binder<decay_t<CompletionToken>, Executor>(executor_arg_t(),
|
424
|
+
static_cast<CompletionToken&&>(completion_token), executor_);
|
425
|
+
}
|
426
|
+
|
427
|
+
//private:
|
428
|
+
Executor executor_;
|
429
|
+
};
|
430
|
+
|
431
|
+
/// Create a partial completion token that associates an executor.
|
432
|
+
template <typename Executor>
|
433
|
+
BOOST_ASIO_NODISCARD inline partial_executor_binder<Executor>
|
434
|
+
bind_executor(const Executor& ex,
|
435
|
+
constraint_t<
|
436
|
+
is_executor<Executor>::value || execution::is_executor<Executor>::value
|
437
|
+
> = 0)
|
438
|
+
{
|
439
|
+
return partial_executor_binder<Executor>(ex);
|
440
|
+
}
|
441
|
+
|
398
442
|
/// Associate an object of type @c T with an executor of type @c Executor.
|
399
443
|
template <typename Executor, typename T>
|
400
444
|
BOOST_ASIO_NODISCARD inline executor_binder<decay_t<T>, Executor>
|
@@ -407,6 +451,20 @@ bind_executor(const Executor& ex, T&& t,
|
|
407
451
|
executor_arg_t(), ex, static_cast<T&&>(t));
|
408
452
|
}
|
409
453
|
|
454
|
+
/// Create a partial completion token that associates an execution context's
|
455
|
+
/// executor.
|
456
|
+
template <typename ExecutionContext>
|
457
|
+
BOOST_ASIO_NODISCARD inline partial_executor_binder<
|
458
|
+
typename ExecutionContext::executor_type>
|
459
|
+
bind_executor(ExecutionContext& ctx,
|
460
|
+
constraint_t<
|
461
|
+
is_convertible<ExecutionContext&, execution_context&>::value
|
462
|
+
> = 0)
|
463
|
+
{
|
464
|
+
return partial_executor_binder<typename ExecutionContext::executor_type>(
|
465
|
+
ctx.get_executor());
|
466
|
+
}
|
467
|
+
|
410
468
|
/// Associate an object of type @c T with an execution context's executor.
|
411
469
|
template <typename ExecutionContext, typename T>
|
412
470
|
BOOST_ASIO_NODISCARD inline executor_binder<decay_t<T>,
|
@@ -492,49 +550,48 @@ public:
|
|
492
550
|
}
|
493
551
|
|
494
552
|
template <typename Initiation>
|
495
|
-
struct init_wrapper
|
553
|
+
struct init_wrapper : detail::initiation_base<Initiation>
|
496
554
|
{
|
497
|
-
|
498
|
-
init_wrapper(const Executor& ex, Init&& init)
|
499
|
-
: ex_(ex),
|
500
|
-
initiation_(static_cast<Init&&>(init))
|
501
|
-
{
|
502
|
-
}
|
555
|
+
using detail::initiation_base<Initiation>::initiation_base;
|
503
556
|
|
504
557
|
template <typename Handler, typename... Args>
|
505
|
-
void operator()(Handler&& handler, Args&&... args)
|
558
|
+
void operator()(Handler&& handler, const Executor& e, Args&&... args) &&
|
506
559
|
{
|
507
|
-
static_cast<Initiation&&>(
|
560
|
+
static_cast<Initiation&&>(*this)(
|
508
561
|
executor_binder<decay_t<Handler>, Executor>(
|
509
|
-
executor_arg_t(),
|
562
|
+
executor_arg_t(), e, static_cast<Handler&&>(handler)),
|
510
563
|
static_cast<Args&&>(args)...);
|
511
564
|
}
|
512
565
|
|
513
566
|
template <typename Handler, typename... Args>
|
514
|
-
void operator()(Handler&& handler,
|
567
|
+
void operator()(Handler&& handler,
|
568
|
+
const Executor& e, Args&&... args) const &
|
515
569
|
{
|
516
|
-
|
570
|
+
static_cast<const Initiation&>(*this)(
|
517
571
|
executor_binder<decay_t<Handler>, Executor>(
|
518
|
-
executor_arg_t(),
|
572
|
+
executor_arg_t(), e, static_cast<Handler&&>(handler)),
|
519
573
|
static_cast<Args&&>(args)...);
|
520
574
|
}
|
521
|
-
|
522
|
-
Executor ex_;
|
523
|
-
Initiation initiation_;
|
524
575
|
};
|
525
576
|
|
526
577
|
template <typename Initiation, typename RawCompletionToken, typename... Args>
|
527
578
|
static auto initiate(Initiation&& initiation,
|
528
579
|
RawCompletionToken&& token, Args&&... args)
|
529
580
|
-> decltype(
|
530
|
-
async_initiate<
|
531
|
-
|
532
|
-
|
581
|
+
async_initiate<
|
582
|
+
conditional_t<
|
583
|
+
is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
|
584
|
+
Signature>(
|
585
|
+
declval<init_wrapper<decay_t<Initiation>>>(),
|
586
|
+
token.get(), token.get_executor(), static_cast<Args&&>(args)...))
|
533
587
|
{
|
534
|
-
return async_initiate<
|
588
|
+
return async_initiate<
|
589
|
+
conditional_t<
|
590
|
+
is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
|
591
|
+
Signature>(
|
535
592
|
init_wrapper<decay_t<Initiation>>(
|
536
|
-
|
537
|
-
token.get(), static_cast<Args&&>(args)...);
|
593
|
+
static_cast<Initiation&&>(initiation)),
|
594
|
+
token.get(), token.get_executor(), static_cast<Args&&>(args)...);
|
538
595
|
}
|
539
596
|
|
540
597
|
private:
|
@@ -542,6 +599,31 @@ private:
|
|
542
599
|
async_result& operator=(const async_result&) = delete;
|
543
600
|
};
|
544
601
|
|
602
|
+
template <typename Executor, typename... Signatures>
|
603
|
+
struct async_result<partial_executor_binder<Executor>, Signatures...>
|
604
|
+
{
|
605
|
+
template <typename Initiation, typename RawCompletionToken, typename... Args>
|
606
|
+
static auto initiate(Initiation&& initiation,
|
607
|
+
RawCompletionToken&& token, Args&&... args)
|
608
|
+
-> decltype(
|
609
|
+
async_initiate<Signatures...>(
|
610
|
+
static_cast<Initiation&&>(initiation),
|
611
|
+
executor_binder<
|
612
|
+
default_completion_token_t<associated_executor_t<Initiation>>,
|
613
|
+
Executor>(executor_arg_t(), token.executor_,
|
614
|
+
default_completion_token_t<associated_executor_t<Initiation>>{}),
|
615
|
+
static_cast<Args&&>(args)...))
|
616
|
+
{
|
617
|
+
return async_initiate<Signatures...>(
|
618
|
+
static_cast<Initiation&&>(initiation),
|
619
|
+
executor_binder<
|
620
|
+
default_completion_token_t<associated_executor_t<Initiation>>,
|
621
|
+
Executor>(executor_arg_t(), token.executor_,
|
622
|
+
default_completion_token_t<associated_executor_t<Initiation>>{}),
|
623
|
+
static_cast<Args&&>(args)...);
|
624
|
+
}
|
625
|
+
};
|
626
|
+
|
545
627
|
template <template <typename, typename> class Associator,
|
546
628
|
typename T, typename Executor, typename DefaultCandidate>
|
547
629
|
struct associator<Associator, executor_binder<T, Executor>, DefaultCandidate>
|
@@ -16,10 +16,12 @@
|
|
16
16
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
17
|
|
18
18
|
#include <boost/asio/detail/config.hpp>
|
19
|
-
#include <boost/asio/
|
19
|
+
#include <boost/asio/associated_executor.hpp>
|
20
20
|
#include <boost/asio/associated_immediate_executor.hpp>
|
21
21
|
#include <boost/asio/associator.hpp>
|
22
22
|
#include <boost/asio/async_result.hpp>
|
23
|
+
#include <boost/asio/detail/initiation_base.hpp>
|
24
|
+
#include <boost/asio/detail/type_traits.hpp>
|
23
25
|
|
24
26
|
#include <boost/asio/detail/push_options.hpp>
|
25
27
|
|
@@ -366,6 +368,46 @@ private:
|
|
366
368
|
T target_;
|
367
369
|
};
|
368
370
|
|
371
|
+
/// A function object type that adapts a @ref completion_token to specify that
|
372
|
+
/// the completion handler should have the supplied executor as its associated
|
373
|
+
/// immediate executor.
|
374
|
+
/**
|
375
|
+
* May also be used directly as a completion token, in which case it adapts the
|
376
|
+
* asynchronous operation's default completion token (or boost::asio::deferred
|
377
|
+
* if no default is available).
|
378
|
+
*/
|
379
|
+
template <typename Executor>
|
380
|
+
struct partial_immediate_executor_binder
|
381
|
+
{
|
382
|
+
/// Constructor that specifies associated executor.
|
383
|
+
explicit partial_immediate_executor_binder(const Executor& ex)
|
384
|
+
: executor_(ex)
|
385
|
+
{
|
386
|
+
}
|
387
|
+
|
388
|
+
/// Adapt a @ref completion_token to specify that the completion handler
|
389
|
+
/// should have the executor as its associated immediate executor.
|
390
|
+
template <typename CompletionToken>
|
391
|
+
BOOST_ASIO_NODISCARD inline
|
392
|
+
constexpr immediate_executor_binder<decay_t<CompletionToken>, Executor>
|
393
|
+
operator()(CompletionToken&& completion_token) const
|
394
|
+
{
|
395
|
+
return immediate_executor_binder<decay_t<CompletionToken>, Executor>(
|
396
|
+
static_cast<CompletionToken&&>(completion_token), executor_);
|
397
|
+
}
|
398
|
+
|
399
|
+
//private:
|
400
|
+
Executor executor_;
|
401
|
+
};
|
402
|
+
|
403
|
+
/// Create a partial completion token that associates an executor.
|
404
|
+
template <typename Executor>
|
405
|
+
BOOST_ASIO_NODISCARD inline partial_immediate_executor_binder<Executor>
|
406
|
+
bind_immediate_executor(const Executor& ex)
|
407
|
+
{
|
408
|
+
return partial_immediate_executor_binder<Executor>(ex);
|
409
|
+
}
|
410
|
+
|
369
411
|
/// Associate an object of type @c T with a immediate executor of type
|
370
412
|
/// @c Executor.
|
371
413
|
template <typename Executor, typename T>
|
@@ -450,52 +492,52 @@ public:
|
|
450
492
|
}
|
451
493
|
|
452
494
|
template <typename Initiation>
|
453
|
-
struct init_wrapper
|
495
|
+
struct init_wrapper : detail::initiation_base<Initiation>
|
454
496
|
{
|
455
|
-
|
456
|
-
init_wrapper(const Executor& e, Init&& init)
|
457
|
-
: executor_(e),
|
458
|
-
initiation_(static_cast<Init&&>(init))
|
459
|
-
{
|
460
|
-
}
|
497
|
+
using detail::initiation_base<Initiation>::initiation_base;
|
461
498
|
|
462
499
|
template <typename Handler, typename... Args>
|
463
|
-
void operator()(Handler&& handler, Args&&... args)
|
500
|
+
void operator()(Handler&& handler, const Executor& e, Args&&... args) &&
|
464
501
|
{
|
465
|
-
static_cast<Initiation&&>(
|
502
|
+
static_cast<Initiation&&>(*this)(
|
466
503
|
immediate_executor_binder<
|
467
504
|
decay_t<Handler>, Executor>(
|
468
|
-
|
505
|
+
e, static_cast<Handler&&>(handler)),
|
469
506
|
static_cast<Args&&>(args)...);
|
470
507
|
}
|
471
508
|
|
472
509
|
template <typename Handler, typename... Args>
|
473
|
-
void operator()(Handler&& handler,
|
510
|
+
void operator()(Handler&& handler,
|
511
|
+
const Executor& e, Args&&... args) const &
|
474
512
|
{
|
475
|
-
|
513
|
+
static_cast<const Initiation&>(*this)(
|
476
514
|
immediate_executor_binder<
|
477
515
|
decay_t<Handler>, Executor>(
|
478
|
-
|
516
|
+
e, static_cast<Handler&&>(handler)),
|
479
517
|
static_cast<Args&&>(args)...);
|
480
518
|
}
|
481
|
-
|
482
|
-
Executor executor_;
|
483
|
-
Initiation initiation_;
|
484
519
|
};
|
485
520
|
|
486
521
|
template <typename Initiation, typename RawCompletionToken, typename... Args>
|
487
522
|
static auto initiate(Initiation&& initiation,
|
488
523
|
RawCompletionToken&& token, Args&&... args)
|
489
524
|
-> decltype(
|
490
|
-
async_initiate<
|
491
|
-
|
492
|
-
|
525
|
+
async_initiate<
|
526
|
+
conditional_t<
|
527
|
+
is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
|
528
|
+
Signature>(
|
529
|
+
declval<init_wrapper<decay_t<Initiation>>>(),
|
530
|
+
token.get(), token.get_immediate_executor(),
|
531
|
+
static_cast<Args&&>(args)...))
|
493
532
|
{
|
494
|
-
return async_initiate<
|
533
|
+
return async_initiate<
|
534
|
+
conditional_t<
|
535
|
+
is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
|
536
|
+
Signature>(
|
495
537
|
init_wrapper<decay_t<Initiation>>(
|
496
|
-
token.get_immediate_executor(),
|
497
538
|
static_cast<Initiation&&>(initiation)),
|
498
|
-
token.get(),
|
539
|
+
token.get(), token.get_immediate_executor(),
|
540
|
+
static_cast<Args&&>(args)...);
|
499
541
|
}
|
500
542
|
|
501
543
|
private:
|
@@ -505,6 +547,31 @@ private:
|
|
505
547
|
async_result<T, Signature> target_;
|
506
548
|
};
|
507
549
|
|
550
|
+
template <typename Executor, typename... Signatures>
|
551
|
+
struct async_result<partial_immediate_executor_binder<Executor>, Signatures...>
|
552
|
+
{
|
553
|
+
template <typename Initiation, typename RawCompletionToken, typename... Args>
|
554
|
+
static auto initiate(Initiation&& initiation,
|
555
|
+
RawCompletionToken&& token, Args&&... args)
|
556
|
+
-> decltype(
|
557
|
+
async_initiate<Signatures...>(
|
558
|
+
static_cast<Initiation&&>(initiation),
|
559
|
+
immediate_executor_binder<
|
560
|
+
default_completion_token_t<associated_executor_t<Initiation>>,
|
561
|
+
Executor>(token.executor_,
|
562
|
+
default_completion_token_t<associated_executor_t<Initiation>>{}),
|
563
|
+
static_cast<Args&&>(args)...))
|
564
|
+
{
|
565
|
+
return async_initiate<Signatures...>(
|
566
|
+
static_cast<Initiation&&>(initiation),
|
567
|
+
immediate_executor_binder<
|
568
|
+
default_completion_token_t<associated_executor_t<Initiation>>,
|
569
|
+
Executor>(token.executor_,
|
570
|
+
default_completion_token_t<associated_executor_t<Initiation>>{}),
|
571
|
+
static_cast<Args&&>(args)...);
|
572
|
+
}
|
573
|
+
};
|
574
|
+
|
508
575
|
template <template <typename, typename> class Associator,
|
509
576
|
typename T, typename Executor, typename DefaultCandidate>
|
510
577
|
struct associator<Associator,
|
@@ -2731,7 +2731,7 @@ struct literal<'0', 'X', Chars...> :
|
|
2731
2731
|
} // namespace detail
|
2732
2732
|
|
2733
2733
|
/// Literal operator for creating const_buffer objects from string literals.
|
2734
|
-
inline BOOST_ASIO_CONST_BUFFER operator""
|
2734
|
+
inline BOOST_ASIO_CONST_BUFFER operator ""_buf(const char* data, std::size_t n)
|
2735
2735
|
{
|
2736
2736
|
return BOOST_ASIO_CONST_BUFFER(data, n);
|
2737
2737
|
}
|
@@ -2739,7 +2739,7 @@ inline BOOST_ASIO_CONST_BUFFER operator"" _buf(const char* data, std::size_t n)
|
|
2739
2739
|
/// Literal operator for creating const_buffer objects from unbounded binary or
|
2740
2740
|
/// hexadecimal integer literals.
|
2741
2741
|
template <char... Chars>
|
2742
|
-
inline BOOST_ASIO_CONST_BUFFER operator""
|
2742
|
+
inline BOOST_ASIO_CONST_BUFFER operator ""_buf()
|
2743
2743
|
{
|
2744
2744
|
return BOOST_ASIO_CONST_BUFFER(
|
2745
2745
|
+detail::literal<Chars...>::data,
|