passenger 6.0.23 → 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 +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
@@ -230,7 +230,7 @@ public:
|
|
230
230
|
default:
|
231
231
|
p.p->ec_ = boost::asio::error::invalid_argument;
|
232
232
|
start_op(impl, reactor::read_op, p.p,
|
233
|
-
is_continuation, false, true, &io_ex, 0);
|
233
|
+
is_continuation, false, true, false, &io_ex, 0);
|
234
234
|
p.v = p.p = 0;
|
235
235
|
return;
|
236
236
|
}
|
@@ -243,7 +243,8 @@ public:
|
|
243
243
|
&reactor_, &impl.reactor_data_, impl.socket_, op_type);
|
244
244
|
}
|
245
245
|
|
246
|
-
start_op(impl, op_type, p.p, is_continuation,
|
246
|
+
start_op(impl, op_type, p.p, is_continuation,
|
247
|
+
false, false, false, &io_ex, 0);
|
247
248
|
p.v = p.p = 0;
|
248
249
|
}
|
249
250
|
|
@@ -315,7 +316,7 @@ public:
|
|
315
316
|
start_op(impl, reactor::write_op, p.p, is_continuation, true,
|
316
317
|
((impl.state_ & socket_ops::stream_oriented)
|
317
318
|
&& buffer_sequence_adapter<boost::asio::const_buffer,
|
318
|
-
ConstBufferSequence>::all_empty(buffers)), &io_ex, 0);
|
319
|
+
ConstBufferSequence>::all_empty(buffers)), true, &io_ex, 0);
|
319
320
|
p.v = p.p = 0;
|
320
321
|
}
|
321
322
|
|
@@ -348,7 +349,7 @@ public:
|
|
348
349
|
&impl, impl.socket_, "async_send(null_buffers)"));
|
349
350
|
|
350
351
|
start_op(impl, reactor::write_op, p.p,
|
351
|
-
is_continuation, false, false, &io_ex, 0);
|
352
|
+
is_continuation, false, false, false, &io_ex, 0);
|
352
353
|
p.v = p.p = 0;
|
353
354
|
}
|
354
355
|
|
@@ -425,7 +426,7 @@ public:
|
|
425
426
|
(flags & socket_base::message_out_of_band) == 0,
|
426
427
|
((impl.state_ & socket_ops::stream_oriented)
|
427
428
|
&& buffer_sequence_adapter<boost::asio::mutable_buffer,
|
428
|
-
MutableBufferSequence>::all_empty(buffers)), &io_ex, 0);
|
429
|
+
MutableBufferSequence>::all_empty(buffers)), true, &io_ex, 0);
|
429
430
|
p.v = p.p = 0;
|
430
431
|
}
|
431
432
|
|
@@ -461,7 +462,7 @@ public:
|
|
461
462
|
start_op(impl,
|
462
463
|
(flags & socket_base::message_out_of_band)
|
463
464
|
? reactor::except_op : reactor::read_op,
|
464
|
-
p.p, is_continuation, false, false, &io_ex, 0);
|
465
|
+
p.p, is_continuation, false, false, false, &io_ex, 0);
|
465
466
|
p.v = p.p = 0;
|
466
467
|
}
|
467
468
|
|
@@ -533,7 +534,8 @@ public:
|
|
533
534
|
(in_flags & socket_base::message_out_of_band)
|
534
535
|
? reactor::except_op : reactor::read_op,
|
535
536
|
p.p, is_continuation,
|
536
|
-
(in_flags & socket_base::message_out_of_band) == 0,
|
537
|
+
(in_flags & socket_base::message_out_of_band) == 0,
|
538
|
+
false, true, &io_ex, 0);
|
537
539
|
p.v = p.p = 0;
|
538
540
|
}
|
539
541
|
|
@@ -574,7 +576,7 @@ public:
|
|
574
576
|
start_op(impl,
|
575
577
|
(in_flags & socket_base::message_out_of_band)
|
576
578
|
? reactor::except_op : reactor::read_op,
|
577
|
-
p.p, is_continuation, false, false, &io_ex, 0);
|
579
|
+
p.p, is_continuation, false, false, false, &io_ex, 0);
|
578
580
|
p.v = p.p = 0;
|
579
581
|
}
|
580
582
|
|
@@ -590,8 +592,9 @@ protected:
|
|
590
592
|
const native_handle_type& native_socket, boost::system::error_code& ec);
|
591
593
|
|
592
594
|
// Start the asynchronous read or write operation.
|
593
|
-
BOOST_ASIO_DECL void do_start_op(base_implementation_type& impl,
|
594
|
-
reactor_op* op, bool is_continuation,
|
595
|
+
BOOST_ASIO_DECL void do_start_op(base_implementation_type& impl,
|
596
|
+
int op_type, reactor_op* op, bool is_continuation,
|
597
|
+
bool allow_speculative, bool noop, bool needs_non_blocking,
|
595
598
|
void (*on_immediate)(operation* op, bool, const void*),
|
596
599
|
const void* immediate_arg);
|
597
600
|
|
@@ -599,18 +602,19 @@ protected:
|
|
599
602
|
// immediate completion.
|
600
603
|
template <typename Op>
|
601
604
|
void start_op(base_implementation_type& impl, int op_type, Op* op,
|
602
|
-
bool is_continuation, bool
|
603
|
-
const void* io_ex, ...)
|
605
|
+
bool is_continuation, bool allow_speculative, bool noop,
|
606
|
+
bool needs_non_blocking, const void* io_ex, ...)
|
604
607
|
{
|
605
|
-
return do_start_op(impl, op_type, op, is_continuation,
|
606
|
-
|
608
|
+
return do_start_op(impl, op_type, op, is_continuation, allow_speculative,
|
609
|
+
noop, needs_non_blocking, &Op::do_immediate, io_ex);
|
607
610
|
}
|
608
611
|
|
609
612
|
// Start the asynchronous operation for handlers that are not specialised for
|
610
613
|
// immediate completion.
|
611
614
|
template <typename Op>
|
612
|
-
void start_op(base_implementation_type& impl, int op_type,
|
613
|
-
|
615
|
+
void start_op(base_implementation_type& impl, int op_type,
|
616
|
+
Op* op, bool is_continuation, bool allow_speculative,
|
617
|
+
bool noop, bool needs_non_blocking, const void*,
|
614
618
|
enable_if_t<
|
615
619
|
is_same<
|
616
620
|
typename associated_immediate_executor<
|
@@ -621,8 +625,9 @@ protected:
|
|
621
625
|
>::value
|
622
626
|
>*)
|
623
627
|
{
|
624
|
-
return do_start_op(impl, op_type, op, is_continuation,
|
625
|
-
noop,
|
628
|
+
return do_start_op(impl, op_type, op, is_continuation,
|
629
|
+
allow_speculative, noop, needs_non_blocking,
|
630
|
+
&reactor::call_post_immediate_completion, &reactor_);
|
626
631
|
}
|
627
632
|
|
628
633
|
// Start the asynchronous accept operation.
|
@@ -49,16 +49,25 @@ public:
|
|
49
49
|
|
50
50
|
T* allocate(std::size_t n)
|
51
51
|
{
|
52
|
+
#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
|
52
53
|
void* p = thread_info_base::allocate(Purpose(),
|
53
54
|
thread_context::top_of_thread_call_stack(),
|
54
55
|
sizeof(T) * n, alignof(T));
|
56
|
+
#else // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
|
57
|
+
void* p = boost::asio::aligned_new(align, s);
|
58
|
+
#endif // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
|
55
59
|
return static_cast<T*>(p);
|
56
60
|
}
|
57
61
|
|
58
62
|
void deallocate(T* p, std::size_t n)
|
59
63
|
{
|
64
|
+
#if !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
|
60
65
|
thread_info_base::deallocate(Purpose(),
|
61
66
|
thread_context::top_of_thread_call_stack(), p, sizeof(T) * n);
|
67
|
+
#else // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
|
68
|
+
(void)n;
|
69
|
+
boost::asio::aligned_delete(p);
|
70
|
+
#endif // !defined(BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING)
|
62
71
|
}
|
63
72
|
};
|
64
73
|
|
@@ -86,7 +86,7 @@ public:
|
|
86
86
|
{
|
87
87
|
// The operation is being run on the worker io_context. Time to perform
|
88
88
|
// the resolver operation.
|
89
|
-
|
89
|
+
|
90
90
|
// Perform the blocking host resolution operation.
|
91
91
|
socket_ops::background_getaddrinfo(o->cancel_token_,
|
92
92
|
o->query_.host_name().c_str(), o->query_.service_name().c_str(),
|
@@ -90,7 +90,17 @@ public:
|
|
90
90
|
};
|
91
91
|
};
|
92
92
|
|
93
|
-
|
93
|
+
struct timed_cancel_tag
|
94
|
+
{
|
95
|
+
enum
|
96
|
+
{
|
97
|
+
cache_size = BOOST_ASIO_RECYCLING_ALLOCATOR_CACHE_SIZE,
|
98
|
+
begin_mem_index = parallel_group_tag::end_mem_index,
|
99
|
+
end_mem_index = begin_mem_index + cache_size
|
100
|
+
};
|
101
|
+
};
|
102
|
+
|
103
|
+
enum { max_mem_index = timed_cancel_tag::end_mem_index };
|
94
104
|
|
95
105
|
thread_info_base()
|
96
106
|
#if !defined(BOOST_ASIO_NO_EXCEPTIONS)
|
@@ -0,0 +1,363 @@
|
|
1
|
+
//
|
2
|
+
// detail/timed_cancel_op.hpp
|
3
|
+
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
+
//
|
5
|
+
// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
|
+
//
|
7
|
+
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
8
|
+
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
|
+
//
|
10
|
+
|
11
|
+
#ifndef BOOST_ASIO_DETAIL_TIMED_CANCEL_OP_HPP
|
12
|
+
#define BOOST_ASIO_DETAIL_TIMED_CANCEL_OP_HPP
|
13
|
+
|
14
|
+
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
15
|
+
# pragma once
|
16
|
+
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
|
+
|
18
|
+
#include <boost/asio/detail/config.hpp>
|
19
|
+
#include <boost/asio/associated_cancellation_slot.hpp>
|
20
|
+
#include <boost/asio/associator.hpp>
|
21
|
+
#include <boost/asio/basic_waitable_timer.hpp>
|
22
|
+
#include <boost/asio/cancellation_signal.hpp>
|
23
|
+
#include <boost/asio/detail/atomic_count.hpp>
|
24
|
+
#include <boost/asio/detail/completion_payload.hpp>
|
25
|
+
#include <boost/asio/detail/completion_payload_handler.hpp>
|
26
|
+
#include <boost/asio/detail/handler_alloc_helpers.hpp>
|
27
|
+
#include <boost/asio/detail/type_traits.hpp>
|
28
|
+
|
29
|
+
#include <boost/asio/detail/push_options.hpp>
|
30
|
+
|
31
|
+
namespace boost {
|
32
|
+
namespace asio {
|
33
|
+
namespace detail {
|
34
|
+
|
35
|
+
template <typename Op, typename... Signatures>
|
36
|
+
class timed_cancel_op_handler;
|
37
|
+
|
38
|
+
template <typename Op>
|
39
|
+
class timed_cancel_timer_handler;
|
40
|
+
|
41
|
+
template <typename Handler, typename Timer, typename... Signatures>
|
42
|
+
class timed_cancel_op
|
43
|
+
{
|
44
|
+
public:
|
45
|
+
using handler_type = Handler;
|
46
|
+
|
47
|
+
BOOST_ASIO_DEFINE_TAGGED_HANDLER_PTR(
|
48
|
+
thread_info_base::timed_cancel_tag, timed_cancel_op);
|
49
|
+
|
50
|
+
timed_cancel_op(Handler& handler, Timer timer,
|
51
|
+
cancellation_type_t cancel_type)
|
52
|
+
: ref_count_(2),
|
53
|
+
handler_(static_cast<Handler&&>(handler)),
|
54
|
+
timer_(static_cast<Timer&&>(timer)),
|
55
|
+
cancellation_type_(cancel_type),
|
56
|
+
cancel_proxy_(nullptr),
|
57
|
+
has_payload_(false),
|
58
|
+
has_pending_timer_wait_(true)
|
59
|
+
{
|
60
|
+
}
|
61
|
+
|
62
|
+
~timed_cancel_op()
|
63
|
+
{
|
64
|
+
if (has_payload_)
|
65
|
+
payload_storage_.payload_.~payload_type();
|
66
|
+
}
|
67
|
+
|
68
|
+
cancellation_slot get_cancellation_slot() noexcept
|
69
|
+
{
|
70
|
+
return cancellation_signal_.slot();
|
71
|
+
}
|
72
|
+
|
73
|
+
template <typename Initiation, typename... Args>
|
74
|
+
void start(Initiation&& initiation, Args&&... args)
|
75
|
+
{
|
76
|
+
using op_handler_type =
|
77
|
+
timed_cancel_op_handler<timed_cancel_op, Signatures...>;
|
78
|
+
op_handler_type op_handler(this);
|
79
|
+
|
80
|
+
using timer_handler_type =
|
81
|
+
timed_cancel_timer_handler<timed_cancel_op>;
|
82
|
+
timer_handler_type timer_handler(this);
|
83
|
+
|
84
|
+
associated_cancellation_slot_t<Handler> slot
|
85
|
+
= (get_associated_cancellation_slot)(handler_);
|
86
|
+
if (slot.is_connected())
|
87
|
+
cancel_proxy_ = &slot.template emplace<cancel_proxy>(this);
|
88
|
+
|
89
|
+
timer_.async_wait(static_cast<timer_handler_type&&>(timer_handler));
|
90
|
+
async_initiate<op_handler_type, Signatures...>(
|
91
|
+
static_cast<Initiation&&>(initiation),
|
92
|
+
static_cast<op_handler_type&>(op_handler),
|
93
|
+
static_cast<Args&&>(args)...);
|
94
|
+
}
|
95
|
+
|
96
|
+
template <typename Message>
|
97
|
+
void handle_op(Message&& message)
|
98
|
+
{
|
99
|
+
if (cancel_proxy_)
|
100
|
+
cancel_proxy_->op_ = nullptr;
|
101
|
+
|
102
|
+
new (&payload_storage_.payload_) payload_type(
|
103
|
+
static_cast<Message&&>(message));
|
104
|
+
has_payload_ = true;
|
105
|
+
|
106
|
+
if (has_pending_timer_wait_)
|
107
|
+
{
|
108
|
+
timer_.cancel();
|
109
|
+
release();
|
110
|
+
}
|
111
|
+
else
|
112
|
+
{
|
113
|
+
complete();
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
void handle_timer()
|
118
|
+
{
|
119
|
+
has_pending_timer_wait_ = false;
|
120
|
+
|
121
|
+
if (has_payload_)
|
122
|
+
{
|
123
|
+
complete();
|
124
|
+
}
|
125
|
+
else
|
126
|
+
{
|
127
|
+
cancellation_signal_.emit(cancellation_type_);
|
128
|
+
release();
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
void release()
|
133
|
+
{
|
134
|
+
if (--ref_count_ == 0)
|
135
|
+
{
|
136
|
+
ptr p = { boost::asio::detail::addressof(handler_), this, this };
|
137
|
+
Handler handler(static_cast<Handler&&>(handler_));
|
138
|
+
p.h = boost::asio::detail::addressof(handler);
|
139
|
+
p.reset();
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
143
|
+
void complete()
|
144
|
+
{
|
145
|
+
if (--ref_count_ == 0)
|
146
|
+
{
|
147
|
+
ptr p = { boost::asio::detail::addressof(handler_), this, this };
|
148
|
+
completion_payload_handler<payload_type, Handler> handler(
|
149
|
+
static_cast<payload_type&&>(payload_storage_.payload_), handler_);
|
150
|
+
p.h = boost::asio::detail::addressof(handler.handler());
|
151
|
+
p.reset();
|
152
|
+
handler();
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
//private:
|
157
|
+
typedef completion_payload<Signatures...> payload_type;
|
158
|
+
|
159
|
+
struct cancel_proxy
|
160
|
+
{
|
161
|
+
cancel_proxy(timed_cancel_op* op)
|
162
|
+
: op_(op)
|
163
|
+
{
|
164
|
+
}
|
165
|
+
|
166
|
+
void operator()(cancellation_type_t type)
|
167
|
+
{
|
168
|
+
if (op_)
|
169
|
+
op_->cancellation_signal_.emit(type);
|
170
|
+
}
|
171
|
+
|
172
|
+
timed_cancel_op* op_;
|
173
|
+
};
|
174
|
+
|
175
|
+
// The number of handlers that share a reference to the state.
|
176
|
+
atomic_count ref_count_;
|
177
|
+
|
178
|
+
// The handler to be called when the operation completes.
|
179
|
+
Handler handler_;
|
180
|
+
|
181
|
+
// The timer used to determine when to cancel the pending operation.
|
182
|
+
Timer timer_;
|
183
|
+
|
184
|
+
// The cancellation signal and type used to cancel the pending operation.
|
185
|
+
cancellation_signal cancellation_signal_;
|
186
|
+
cancellation_type_t cancellation_type_;
|
187
|
+
|
188
|
+
// A proxy cancel handler used to allow cancellation of the timed operation.
|
189
|
+
cancel_proxy* cancel_proxy_;
|
190
|
+
|
191
|
+
// Arguments to be passed to the completion handler.
|
192
|
+
union payload_storage
|
193
|
+
{
|
194
|
+
payload_storage() {}
|
195
|
+
~payload_storage() {}
|
196
|
+
|
197
|
+
char dummy_;
|
198
|
+
payload_type payload_;
|
199
|
+
} payload_storage_;
|
200
|
+
|
201
|
+
// Whether the payload storage contains a valid payload.
|
202
|
+
bool has_payload_;
|
203
|
+
|
204
|
+
// Whether the asynchronous wait on the timer is still pending
|
205
|
+
bool has_pending_timer_wait_;
|
206
|
+
};
|
207
|
+
|
208
|
+
template <typename Op, typename R, typename... Args>
|
209
|
+
class timed_cancel_op_handler<Op, R(Args...)>
|
210
|
+
{
|
211
|
+
public:
|
212
|
+
using cancellation_slot_type = cancellation_slot;
|
213
|
+
|
214
|
+
explicit timed_cancel_op_handler(Op* op)
|
215
|
+
: op_(op)
|
216
|
+
{
|
217
|
+
}
|
218
|
+
|
219
|
+
timed_cancel_op_handler(timed_cancel_op_handler&& other) noexcept
|
220
|
+
: op_(other.op_)
|
221
|
+
{
|
222
|
+
other.op_ = nullptr;
|
223
|
+
}
|
224
|
+
|
225
|
+
~timed_cancel_op_handler()
|
226
|
+
{
|
227
|
+
if (op_)
|
228
|
+
op_->release();
|
229
|
+
}
|
230
|
+
|
231
|
+
cancellation_slot_type get_cancellation_slot() const noexcept
|
232
|
+
{
|
233
|
+
return op_->get_cancellation_slot();
|
234
|
+
}
|
235
|
+
|
236
|
+
template <typename... Args2>
|
237
|
+
enable_if_t<
|
238
|
+
is_constructible<completion_message<R(Args...)>, int, Args2...>::value
|
239
|
+
> operator()(Args2&&... args)
|
240
|
+
{
|
241
|
+
Op* op = op_;
|
242
|
+
op_ = nullptr;
|
243
|
+
typedef completion_message<R(Args...)> message_type;
|
244
|
+
op->handle_op(message_type(0, static_cast<Args2&&>(args)...));
|
245
|
+
}
|
246
|
+
|
247
|
+
//protected:
|
248
|
+
Op* op_;
|
249
|
+
};
|
250
|
+
|
251
|
+
template <typename Op, typename R, typename... Args, typename... Signatures>
|
252
|
+
class timed_cancel_op_handler<Op, R(Args...), Signatures...> :
|
253
|
+
public timed_cancel_op_handler<Op, Signatures...>
|
254
|
+
{
|
255
|
+
public:
|
256
|
+
using timed_cancel_op_handler<Op, Signatures...>::timed_cancel_op_handler;
|
257
|
+
using timed_cancel_op_handler<Op, Signatures...>::operator();
|
258
|
+
|
259
|
+
template <typename... Args2>
|
260
|
+
enable_if_t<
|
261
|
+
is_constructible<completion_message<R(Args...)>, int, Args2...>::value
|
262
|
+
> operator()(Args2&&... args)
|
263
|
+
{
|
264
|
+
Op* op = this->op_;
|
265
|
+
this->op_ = nullptr;
|
266
|
+
typedef completion_message<R(Args...)> message_type;
|
267
|
+
op->handle_op(message_type(0, static_cast<Args2&&>(args)...));
|
268
|
+
}
|
269
|
+
};
|
270
|
+
|
271
|
+
template <typename Op>
|
272
|
+
class timed_cancel_timer_handler
|
273
|
+
{
|
274
|
+
public:
|
275
|
+
using cancellation_slot_type = cancellation_slot;
|
276
|
+
|
277
|
+
explicit timed_cancel_timer_handler(Op* op)
|
278
|
+
: op_(op)
|
279
|
+
{
|
280
|
+
}
|
281
|
+
|
282
|
+
timed_cancel_timer_handler(timed_cancel_timer_handler&& other) noexcept
|
283
|
+
: op_(other.op_)
|
284
|
+
{
|
285
|
+
other.op_ = nullptr;
|
286
|
+
}
|
287
|
+
|
288
|
+
~timed_cancel_timer_handler()
|
289
|
+
{
|
290
|
+
if (op_)
|
291
|
+
op_->release();
|
292
|
+
}
|
293
|
+
|
294
|
+
cancellation_slot_type get_cancellation_slot() const noexcept
|
295
|
+
{
|
296
|
+
return cancellation_slot_type();
|
297
|
+
}
|
298
|
+
|
299
|
+
void operator()(const boost::system::error_code&)
|
300
|
+
{
|
301
|
+
Op* op = op_;
|
302
|
+
op_ = nullptr;
|
303
|
+
op->handle_timer();
|
304
|
+
}
|
305
|
+
|
306
|
+
//private:
|
307
|
+
Op* op_;
|
308
|
+
};
|
309
|
+
|
310
|
+
} // namespace detail
|
311
|
+
|
312
|
+
template <template <typename, typename> class Associator,
|
313
|
+
typename Op, typename... Signatures, typename DefaultCandidate>
|
314
|
+
struct associator<Associator,
|
315
|
+
detail::timed_cancel_op_handler<Op, Signatures...>, DefaultCandidate>
|
316
|
+
: Associator<typename Op::handler_type, DefaultCandidate>
|
317
|
+
{
|
318
|
+
static typename Associator<typename Op::handler_type, DefaultCandidate>::type
|
319
|
+
get(const detail::timed_cancel_op_handler<Op, Signatures...>& h) noexcept
|
320
|
+
{
|
321
|
+
return Associator<typename Op::handler_type, DefaultCandidate>::get(
|
322
|
+
h.op_->handler_);
|
323
|
+
}
|
324
|
+
|
325
|
+
static auto get(const detail::timed_cancel_op_handler<Op, Signatures...>& h,
|
326
|
+
const DefaultCandidate& c) noexcept
|
327
|
+
-> decltype(Associator<typename Op::handler_type, DefaultCandidate>::get(
|
328
|
+
h.op_->handler_, c))
|
329
|
+
{
|
330
|
+
return Associator<typename Op::handler_type, DefaultCandidate>::get(
|
331
|
+
h.op_->handler_, c);
|
332
|
+
}
|
333
|
+
};
|
334
|
+
|
335
|
+
template <template <typename, typename> class Associator,
|
336
|
+
typename Op, typename DefaultCandidate>
|
337
|
+
struct associator<Associator,
|
338
|
+
detail::timed_cancel_timer_handler<Op>, DefaultCandidate>
|
339
|
+
: Associator<typename Op::handler_type, DefaultCandidate>
|
340
|
+
{
|
341
|
+
static typename Associator<typename Op::handler_type, DefaultCandidate>::type
|
342
|
+
get(const detail::timed_cancel_timer_handler<Op>& h) noexcept
|
343
|
+
{
|
344
|
+
return Associator<typename Op::handler_type, DefaultCandidate>::get(
|
345
|
+
h.op_->handler_);
|
346
|
+
}
|
347
|
+
|
348
|
+
static auto get(const detail::timed_cancel_timer_handler<Op>& h,
|
349
|
+
const DefaultCandidate& c) noexcept
|
350
|
+
-> decltype(Associator<typename Op::handler_type, DefaultCandidate>::get(
|
351
|
+
h.op_->handler_, c))
|
352
|
+
{
|
353
|
+
return Associator<typename Op::handler_type, DefaultCandidate>::get(
|
354
|
+
h.op_->handler_, c);
|
355
|
+
}
|
356
|
+
};
|
357
|
+
|
358
|
+
} // namespace asio
|
359
|
+
} // namespace boost
|
360
|
+
|
361
|
+
#include <boost/asio/detail/pop_options.hpp>
|
362
|
+
|
363
|
+
#endif // BOOST_ASIO_DETAIL_TIMED_CANCEL_OP_HPP
|
@@ -42,12 +42,36 @@ struct is_continuation_if_running
|
|
42
42
|
}
|
43
43
|
};
|
44
44
|
|
45
|
+
template <typename Dispatcher, typename = void>
|
46
|
+
struct wrapped_executor
|
47
|
+
{
|
48
|
+
typedef Dispatcher executor_type;
|
49
|
+
|
50
|
+
static const Dispatcher& get(const Dispatcher& dispatcher) noexcept
|
51
|
+
{
|
52
|
+
return dispatcher;
|
53
|
+
}
|
54
|
+
};
|
55
|
+
|
56
|
+
template <typename Dispatcher>
|
57
|
+
struct wrapped_executor<Dispatcher,
|
58
|
+
void_type<typename Dispatcher::executor_type>>
|
59
|
+
{
|
60
|
+
typedef typename Dispatcher::executor_type executor_type;
|
61
|
+
|
62
|
+
static executor_type get(const Dispatcher& dispatcher) noexcept
|
63
|
+
{
|
64
|
+
return dispatcher.get_executor();
|
65
|
+
}
|
66
|
+
};
|
67
|
+
|
45
68
|
template <typename Dispatcher, typename Handler,
|
46
69
|
typename IsContinuation = is_continuation_delegated>
|
47
70
|
class wrapped_handler
|
48
71
|
{
|
49
72
|
public:
|
50
73
|
typedef void result_type;
|
74
|
+
typedef typename wrapped_executor<Dispatcher>::executor_type executor_type;
|
51
75
|
|
52
76
|
wrapped_handler(Dispatcher dispatcher, Handler& handler)
|
53
77
|
: dispatcher_(dispatcher),
|
@@ -67,6 +91,11 @@ public:
|
|
67
91
|
{
|
68
92
|
}
|
69
93
|
|
94
|
+
executor_type get_executor() const noexcept
|
95
|
+
{
|
96
|
+
return wrapped_executor<Dispatcher>::get(dispatcher_);
|
97
|
+
}
|
98
|
+
|
70
99
|
void operator()()
|
71
100
|
{
|
72
101
|
dispatcher_.dispatch(static_cast<Handler&&>(handler_));
|
@@ -152,49 +181,6 @@ public:
|
|
152
181
|
Handler handler_;
|
153
182
|
};
|
154
183
|
|
155
|
-
template <typename Handler, typename Context>
|
156
|
-
class rewrapped_handler
|
157
|
-
{
|
158
|
-
public:
|
159
|
-
explicit rewrapped_handler(Handler& handler, const Context& context)
|
160
|
-
: context_(context),
|
161
|
-
handler_(static_cast<Handler&&>(handler))
|
162
|
-
{
|
163
|
-
}
|
164
|
-
|
165
|
-
explicit rewrapped_handler(const Handler& handler, const Context& context)
|
166
|
-
: context_(context),
|
167
|
-
handler_(handler)
|
168
|
-
{
|
169
|
-
}
|
170
|
-
|
171
|
-
rewrapped_handler(const rewrapped_handler& other)
|
172
|
-
: context_(other.context_),
|
173
|
-
handler_(other.handler_)
|
174
|
-
{
|
175
|
-
}
|
176
|
-
|
177
|
-
rewrapped_handler(rewrapped_handler&& other)
|
178
|
-
: context_(static_cast<Context&&>(other.context_)),
|
179
|
-
handler_(static_cast<Handler&&>(other.handler_))
|
180
|
-
{
|
181
|
-
}
|
182
|
-
|
183
|
-
void operator()()
|
184
|
-
{
|
185
|
-
handler_();
|
186
|
-
}
|
187
|
-
|
188
|
-
void operator()() const
|
189
|
-
{
|
190
|
-
handler_();
|
191
|
-
}
|
192
|
-
|
193
|
-
//private:
|
194
|
-
Context context_;
|
195
|
-
Handler handler_;
|
196
|
-
};
|
197
|
-
|
198
184
|
template <typename Dispatcher, typename Handler, typename IsContinuation>
|
199
185
|
inline bool asio_handler_is_continuation(
|
200
186
|
wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler)
|
@@ -202,14 +188,6 @@ inline bool asio_handler_is_continuation(
|
|
202
188
|
return IsContinuation()(this_handler->dispatcher_, this_handler->handler_);
|
203
189
|
}
|
204
190
|
|
205
|
-
template <typename Dispatcher, typename Context>
|
206
|
-
inline bool asio_handler_is_continuation(
|
207
|
-
rewrapped_handler<Dispatcher, Context>* this_handler)
|
208
|
-
{
|
209
|
-
return boost_asio_handler_cont_helpers::is_continuation(
|
210
|
-
this_handler->context_);
|
211
|
-
}
|
212
|
-
|
213
191
|
} // namespace detail
|
214
192
|
} // namespace asio
|
215
193
|
} // namespace boost
|
@@ -226,7 +226,7 @@ const T allocator_t<void>::static_query_v;
|
|
226
226
|
#endif // defined(BOOST_ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT)
|
227
227
|
// && defined(BOOST_ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
228
228
|
|
229
|
-
constexpr allocator_t<void> allocator;
|
229
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr allocator_t<void> allocator;
|
230
230
|
|
231
231
|
} // namespace execution
|
232
232
|
|
@@ -719,7 +719,7 @@ void blocking_execute(
|
|
719
719
|
|
720
720
|
typedef detail::blocking_adaptation_t<> blocking_adaptation_t;
|
721
721
|
|
722
|
-
constexpr blocking_adaptation_t blocking_adaptation;
|
722
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr blocking_adaptation_t blocking_adaptation;
|
723
723
|
|
724
724
|
} // namespace execution
|
725
725
|
|