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
@@ -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
|
|