passenger 6.0.22 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +59 -1
- data/Rakefile +13 -2
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +18 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +24 -13
- data/package.json +1 -1
- data/passenger.gemspec +4 -2
- data/resources/templates/standalone/server.erb +1 -0
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +9 -1
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -4
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +8 -3
- data/src/agent/Core/Controller/CheckoutSession.cpp +24 -1
- data/src/agent/Core/Controller/Config.h +5 -1
- data/src/agent/Core/Controller.h +1 -0
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/OptionParser.h +3 -0
- data/src/agent/Core/SpawningKit/ErrorRenderer.h +5 -0
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +2 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +15 -0
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
- data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +13 -0
- data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +16 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/LString.h +4 -0
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
- data/src/nginx_module/Configuration.c +7 -2
- data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +6 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +14 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
- data/src/ruby_native_extension/passenger_native_support.c +1 -0
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
- data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +30 -56
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
- data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +39 -10
@@ -54,7 +54,7 @@
|
|
54
54
|
#include <boost/move/utility_core.hpp>
|
55
55
|
#include <boost/move/iterator.hpp>
|
56
56
|
#include <boost/move/adl_move_swap.hpp>
|
57
|
-
#include <boost/move/detail/
|
57
|
+
#include <boost/move/detail/launder.hpp>
|
58
58
|
// move/detail
|
59
59
|
#include <boost/move/detail/move_helpers.hpp>
|
60
60
|
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
|
@@ -166,19 +166,19 @@ struct node
|
|
166
166
|
# endif
|
167
167
|
|
168
168
|
inline T &get_data()
|
169
|
-
{ return *boost::move_detail::
|
169
|
+
{ return *boost::move_detail::launder_cast<T*>(&this->m_storage); }
|
170
170
|
|
171
171
|
inline const T &get_data() const
|
172
|
-
{ return *boost::move_detail::
|
172
|
+
{ return *boost::move_detail::launder_cast<const T*>(&this->m_storage); }
|
173
173
|
|
174
174
|
inline T *get_data_ptr()
|
175
|
-
{ return boost::move_detail::
|
175
|
+
{ return boost::move_detail::launder_cast<T*>(&this->m_storage); }
|
176
176
|
|
177
177
|
inline const T *get_data_ptr() const
|
178
|
-
{ return boost::move_detail::
|
178
|
+
{ return boost::move_detail::launder_cast<const T*>(&this->m_storage); }
|
179
179
|
|
180
180
|
inline ~node()
|
181
|
-
{ boost::move_detail::
|
181
|
+
{ boost::move_detail::launder_cast<T*>(&this->m_storage)->~T(); }
|
182
182
|
|
183
183
|
#if defined(BOOST_CONTAINER_DISABLE_ALIASING_WARNING)
|
184
184
|
#pragma GCC diagnostic pop
|
@@ -214,7 +214,7 @@ struct index_traits
|
|
214
214
|
typedef typename index_type::const_iterator const_index_iterator;
|
215
215
|
typedef typename index_type::size_type size_type;
|
216
216
|
|
217
|
-
|
217
|
+
BOOST_STATIC_CONSTEXPR size_type ExtraPointers = 3;
|
218
218
|
//Stable vector stores metadata at the end of the index (node_base_ptr vector) with additional 3 pointers:
|
219
219
|
// back() is this->index.back() - ExtraPointers;
|
220
220
|
// end node index is *(this->index.end() - 3)
|
@@ -598,7 +598,7 @@ class stable_vector
|
|
598
598
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
599
599
|
private:
|
600
600
|
BOOST_COPYABLE_AND_MOVABLE(stable_vector)
|
601
|
-
|
601
|
+
BOOST_STATIC_CONSTEXPR size_type ExtraPointers = index_traits_type::ExtraPointers;
|
602
602
|
|
603
603
|
class insert_rollback;
|
604
604
|
friend class insert_rollback;
|
@@ -872,31 +872,14 @@ class stable_vector
|
|
872
872
|
BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
|
873
873
|
|| allocator_traits_type::is_always_equal::value)
|
874
874
|
{
|
875
|
-
//for move constructor, no aliasing (&x != this) is assumed.
|
876
875
|
if (BOOST_LIKELY(this != &x)) {
|
877
|
-
|
878
|
-
|
879
|
-
const bool
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
//going to be equal after this function (either propagated or already equal)
|
885
|
-
if(propagate_alloc || allocators_equal){
|
886
|
-
BOOST_CONTAINER_STABLE_VECTOR_CHECK_INVARIANT
|
887
|
-
//Destroy objects but retain memory in case x reuses it in the future
|
888
|
-
this->clear();
|
889
|
-
//Move allocator if needed
|
890
|
-
dtl::move_alloc(this_alloc, x_alloc, flag);
|
891
|
-
//Take resources
|
892
|
-
this->index.swap(x.index);
|
893
|
-
this->priv_swap_members(x);
|
894
|
-
}
|
895
|
-
//Else do a one by one move
|
896
|
-
else{
|
897
|
-
this->assign( boost::make_move_iterator(x.begin())
|
898
|
-
, boost::make_move_iterator(x.end()));
|
899
|
-
}
|
876
|
+
//We know resources can be transferred at comiple time if both allocators are
|
877
|
+
//always equal or the allocator is going to be propagated
|
878
|
+
const bool can_steal_resources_alloc
|
879
|
+
= allocator_traits_type::propagate_on_container_move_assignment::value
|
880
|
+
|| allocator_traits_type::is_always_equal::value;
|
881
|
+
dtl::bool_<can_steal_resources_alloc> flag;
|
882
|
+
this->priv_move_assign(boost::move(x), flag);
|
900
883
|
}
|
901
884
|
return *this;
|
902
885
|
}
|
@@ -1852,6 +1835,35 @@ class stable_vector
|
|
1852
1835
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
1853
1836
|
private:
|
1854
1837
|
|
1838
|
+
void priv_move_assign(BOOST_RV_REF(stable_vector) x, dtl::bool_<true> /*steal_resources*/)
|
1839
|
+
{
|
1840
|
+
//Resources can be transferred if both allocators are
|
1841
|
+
//going to be equal after this function (either propagated or already equal)
|
1842
|
+
BOOST_CONTAINER_STABLE_VECTOR_CHECK_INVARIANT
|
1843
|
+
//Destroy objects but retain memory in case x reuses it in the future
|
1844
|
+
this->clear();
|
1845
|
+
//Move allocator if needed
|
1846
|
+
dtl::bool_<allocator_traits_type::
|
1847
|
+
propagate_on_container_move_assignment::value> flag;
|
1848
|
+
dtl::move_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag);
|
1849
|
+
|
1850
|
+
//Take resources
|
1851
|
+
this->index = boost::move(x.index); //this also moves the vector's allocator if needed
|
1852
|
+
this->priv_swap_members(x);
|
1853
|
+
}
|
1854
|
+
|
1855
|
+
void priv_move_assign(BOOST_RV_REF(stable_vector) x, dtl::bool_<false> /*steal_resources*/)
|
1856
|
+
{
|
1857
|
+
//We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
|
1858
|
+
//Resources can be transferred if both allocators are equal
|
1859
|
+
if (this->priv_node_alloc() == x.priv_node_alloc()) {
|
1860
|
+
this->priv_move_assign(boost::move(x), dtl::true_());
|
1861
|
+
}
|
1862
|
+
else {
|
1863
|
+
this->assign(boost::make_move_iterator(x.begin()), boost::make_move_iterator(x.end()));
|
1864
|
+
}
|
1865
|
+
}
|
1866
|
+
|
1855
1867
|
bool priv_in_range(const_iterator pos) const
|
1856
1868
|
{
|
1857
1869
|
return (this->begin() <= pos) && (pos < this->end());
|
@@ -2243,7 +2255,7 @@ struct has_trivial_destructor_after_move<boost::container::stable_vector<T, Allo
|
|
2243
2255
|
{
|
2244
2256
|
typedef typename boost::container::stable_vector<T, Allocator>::allocator_type allocator_type;
|
2245
2257
|
typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
|
2246
|
-
|
2258
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
2247
2259
|
::boost::has_trivial_destructor_after_move<pointer>::value;
|
2248
2260
|
};
|
2249
2261
|
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include <boost/container/detail/config_begin.hpp>
|
23
23
|
#include <boost/container/detail/workaround.hpp>
|
24
24
|
#include <boost/container/detail/type_traits.hpp>
|
25
|
+
#include <boost/move/detail/launder.hpp>
|
25
26
|
#include <boost/container/vector.hpp>
|
26
27
|
|
27
28
|
#include <cstddef>
|
@@ -63,12 +64,9 @@ class static_storage_allocator
|
|
63
64
|
{ return *this; }
|
64
65
|
|
65
66
|
inline T* internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
|
66
|
-
{ return
|
67
|
+
{ return move_detail::launder_cast<T*>(&storage); }
|
67
68
|
|
68
|
-
|
69
|
-
{ return static_cast<T*>(static_cast<void*>(storage.data)); }
|
70
|
-
|
71
|
-
static const std::size_t internal_capacity = N;
|
69
|
+
BOOST_STATIC_CONSTEXPR std::size_t internal_capacity = N;
|
72
70
|
|
73
71
|
std::size_t max_size() const
|
74
72
|
{ return N; }
|
@@ -88,7 +86,7 @@ class static_storage_allocator
|
|
88
86
|
|
89
87
|
private:
|
90
88
|
BOOST_CONTAINER_STATIC_ASSERT_MSG(!InplaceAlignment || (InplaceAlignment & (InplaceAlignment-1)) == 0, "Alignment option must be zero or power of two");
|
91
|
-
|
89
|
+
BOOST_STATIC_CONSTEXPR std::size_t final_alignment = InplaceAlignment ? InplaceAlignment : dtl::alignment_of<T>::value;
|
92
90
|
typename dtl::aligned_storage<sizeof(T)*N, final_alignment>::type storage;
|
93
91
|
};
|
94
92
|
|
@@ -190,7 +188,7 @@ public:
|
|
190
188
|
typedef typename base_t::const_reverse_iterator const_reverse_iterator;
|
191
189
|
|
192
190
|
//! @brief The capacity/max size of the container
|
193
|
-
|
191
|
+
BOOST_STATIC_CONSTEXPR size_type static_capacity = Capacity;
|
194
192
|
|
195
193
|
//! @brief Constructs an empty static_vector.
|
196
194
|
//!
|
@@ -43,7 +43,7 @@
|
|
43
43
|
//intrusive
|
44
44
|
#include <boost/intrusive/pointer_traits.hpp>
|
45
45
|
#include <boost/intrusive/detail/hash_combine.hpp>
|
46
|
-
#include <boost/move/detail/
|
46
|
+
#include <boost/move/detail/launder.hpp>
|
47
47
|
//move
|
48
48
|
#include <boost/move/utility_core.hpp>
|
49
49
|
#include <boost/move/adl_move_swap.hpp>
|
@@ -192,13 +192,13 @@ class basic_string_base
|
|
192
192
|
<sizeof(long_t), dtl::alignment_of<long_t>::value>::type long_raw_t;
|
193
193
|
|
194
194
|
protected:
|
195
|
-
|
196
|
-
|
195
|
+
BOOST_STATIC_CONSTEXPR size_type MinInternalBufferChars = 8;
|
196
|
+
BOOST_STATIC_CONSTEXPR size_type AlignmentOfValueType =
|
197
197
|
alignment_of<value_type>::value;
|
198
|
-
|
199
|
-
|
198
|
+
BOOST_STATIC_CONSTEXPR size_type ShortDataOffset = ((sizeof(short_header)-1)/AlignmentOfValueType+1)*AlignmentOfValueType;
|
199
|
+
BOOST_STATIC_CONSTEXPR size_type ZeroCostInternalBufferChars =
|
200
200
|
(sizeof(long_t) - ShortDataOffset)/sizeof(value_type);
|
201
|
-
|
201
|
+
BOOST_STATIC_CONSTEXPR size_type UnalignedFinalInternalBufferChars =
|
202
202
|
(ZeroCostInternalBufferChars > MinInternalBufferChars) ?
|
203
203
|
ZeroCostInternalBufferChars : MinInternalBufferChars;
|
204
204
|
|
@@ -226,7 +226,7 @@ class basic_string_base
|
|
226
226
|
{
|
227
227
|
inline void init()
|
228
228
|
{
|
229
|
-
short_t &s = *::new(this->m_repr
|
229
|
+
short_t &s = *::new(&this->m_repr) short_t;
|
230
230
|
s.h.is_short = 1;
|
231
231
|
s.h.length = 0;
|
232
232
|
}
|
@@ -241,16 +241,16 @@ class basic_string_base
|
|
241
241
|
{ this->init(); }
|
242
242
|
|
243
243
|
inline const short_t *pshort_repr() const
|
244
|
-
{ return move_detail::
|
244
|
+
{ return move_detail::launder_cast<const short_t*>(&m_repr); }
|
245
245
|
|
246
246
|
inline const long_t *plong_repr() const
|
247
|
-
{ return move_detail::
|
247
|
+
{ return move_detail::launder_cast<const long_t*>(&m_repr); }
|
248
248
|
|
249
249
|
inline short_t *pshort_repr()
|
250
|
-
{ return move_detail::
|
250
|
+
{ return move_detail::launder_cast<short_t*>(&m_repr); }
|
251
251
|
|
252
252
|
inline long_t *plong_repr()
|
253
|
-
{ return move_detail::
|
253
|
+
{ return move_detail::launder_cast<long_t*>(&m_repr); }
|
254
254
|
|
255
255
|
repr_t m_repr;
|
256
256
|
} members_;
|
@@ -261,11 +261,11 @@ class basic_string_base
|
|
261
261
|
inline allocator_type &alloc()
|
262
262
|
{ return members_; }
|
263
263
|
|
264
|
-
|
264
|
+
BOOST_STATIC_CONSTEXPR size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type);
|
265
265
|
|
266
266
|
private:
|
267
267
|
|
268
|
-
|
268
|
+
BOOST_STATIC_CONSTEXPR size_type MinAllocation = InternalBufferChars*2;
|
269
269
|
|
270
270
|
protected:
|
271
271
|
inline bool is_short() const
|
@@ -280,7 +280,7 @@ class basic_string_base
|
|
280
280
|
|
281
281
|
inline short_t *construct_short()
|
282
282
|
{
|
283
|
-
short_t *ps = ::new(this->members_.m_repr
|
283
|
+
short_t *ps = ::new(&this->members_.m_repr) short_t;
|
284
284
|
ps->h.is_short = 1;
|
285
285
|
return ps;
|
286
286
|
}
|
@@ -302,7 +302,7 @@ class basic_string_base
|
|
302
302
|
|
303
303
|
inline long_t *construct_long()
|
304
304
|
{
|
305
|
-
long_t *pl = ::new(this->members_.m_repr
|
305
|
+
long_t *pl = ::new(&this->members_.m_repr) long_t;
|
306
306
|
//is_short flag is written in the constructor
|
307
307
|
return pl;
|
308
308
|
}
|
@@ -469,7 +469,7 @@ class basic_string_base
|
|
469
469
|
inline void priv_short_size(size_type sz)
|
470
470
|
{
|
471
471
|
typedef unsigned char uchar_type;
|
472
|
-
|
472
|
+
BOOST_STATIC_CONSTEXPR uchar_type mask = uchar_type(uchar_type(-1) >> 1U);
|
473
473
|
BOOST_ASSERT( sz <= mask );
|
474
474
|
//Make -Wconversion happy
|
475
475
|
this->members_.pshort_repr()->h.length = uchar_type(uchar_type(sz) & mask);
|
@@ -477,7 +477,7 @@ class basic_string_base
|
|
477
477
|
|
478
478
|
inline void priv_long_size(size_type sz)
|
479
479
|
{
|
480
|
-
|
480
|
+
BOOST_STATIC_CONSTEXPR size_type mask = size_type(-1) >> 1U;
|
481
481
|
BOOST_ASSERT( sz <= mask );
|
482
482
|
//Make -Wconversion happy
|
483
483
|
this->members_.plong_repr()->length = sz & mask;
|
@@ -566,7 +566,7 @@ class basic_string
|
|
566
566
|
BOOST_COPYABLE_AND_MOVABLE(basic_string)
|
567
567
|
typedef dtl::basic_string_base<typename real_allocator<CharT, Allocator>::type> base_t;
|
568
568
|
typedef typename base_t::allocator_traits_type allocator_traits_type;
|
569
|
-
|
569
|
+
BOOST_STATIC_CONSTEXPR typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars;
|
570
570
|
|
571
571
|
protected:
|
572
572
|
// Allocator helper class to use a char_traits as a function object.
|
@@ -624,7 +624,7 @@ class basic_string
|
|
624
624
|
typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
|
625
625
|
typedef BOOST_CONTAINER_IMPDEF(boost::container::reverse_iterator<iterator>) reverse_iterator;
|
626
626
|
typedef BOOST_CONTAINER_IMPDEF(boost::container::reverse_iterator<const_iterator>) const_reverse_iterator;
|
627
|
-
|
627
|
+
BOOST_STATIC_CONSTEXPR size_type npos = size_type(-1);
|
628
628
|
|
629
629
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
630
630
|
private:
|
@@ -913,26 +913,13 @@ class basic_string
|
|
913
913
|
|| allocator_traits_type::is_always_equal::value)
|
914
914
|
{
|
915
915
|
if (BOOST_LIKELY(this != &x)) {
|
916
|
-
|
917
|
-
|
918
|
-
const bool
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
//going to be equal after this function (either propagated or already equal)
|
924
|
-
if(propagate_alloc || allocators_equal){
|
925
|
-
//Destroy objects but retain memory in case x reuses it in the future
|
926
|
-
this->clear();
|
927
|
-
//Move allocator if needed
|
928
|
-
dtl::move_alloc(this_alloc, x_alloc, flag);
|
929
|
-
//Nothrow swap
|
930
|
-
this->swap_data(x);
|
931
|
-
}
|
932
|
-
//Else do a one by one move
|
933
|
-
else{
|
934
|
-
this->assign( x.begin(), x.end());
|
935
|
-
}
|
916
|
+
//We know resources can be transferred at comiple time if both allocators are
|
917
|
+
//always equal or the allocator is going to be propagated
|
918
|
+
const bool can_steal_resources_alloc
|
919
|
+
= allocator_traits_type::propagate_on_container_move_assignment::value
|
920
|
+
|| allocator_traits_type::is_always_equal::value;
|
921
|
+
dtl::bool_<can_steal_resources_alloc> flag;
|
922
|
+
this->priv_move_assign(boost::move(x), flag);
|
936
923
|
}
|
937
924
|
return *this;
|
938
925
|
}
|
@@ -2908,6 +2895,30 @@ class basic_string
|
|
2908
2895
|
|
2909
2896
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
2910
2897
|
private:
|
2898
|
+
void priv_move_assign(BOOST_RV_REF(basic_string) x, dtl::bool_<true> /*steal_resources*/)
|
2899
|
+
{
|
2900
|
+
//Destroy objects but retain memory in case x reuses it in the future
|
2901
|
+
this->clear();
|
2902
|
+
//Move allocator if needed
|
2903
|
+
dtl::bool_<allocator_traits_type::
|
2904
|
+
propagate_on_container_move_assignment::value> flag;
|
2905
|
+
dtl::move_alloc(this->alloc(), x.alloc(), flag);
|
2906
|
+
//Nothrow swap
|
2907
|
+
this->swap_data(x);
|
2908
|
+
}
|
2909
|
+
|
2910
|
+
void priv_move_assign(BOOST_RV_REF(basic_string) x, dtl::bool_<false> /*steal_resources*/)
|
2911
|
+
{
|
2912
|
+
//We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
|
2913
|
+
//Resources can be transferred if both allocators are equal
|
2914
|
+
if (this->alloc() == x.alloc()) {
|
2915
|
+
this->priv_move_assign(boost::move(x), dtl::true_());
|
2916
|
+
}
|
2917
|
+
else {
|
2918
|
+
this->assign(x.begin(), x.end());
|
2919
|
+
}
|
2920
|
+
}
|
2921
|
+
|
2911
2922
|
bool priv_reserve_no_null_end(size_type res_arg)
|
2912
2923
|
{
|
2913
2924
|
if (res_arg > this->max_size()){
|
@@ -3074,20 +3085,16 @@ wstring;
|
|
3074
3085
|
|
3075
3086
|
#else
|
3076
3087
|
|
3077
|
-
template <class CharT, class Traits, class Allocator>
|
3078
|
-
const typename basic_string<CharT,Traits,Allocator>::size_type
|
3079
|
-
basic_string<CharT,Traits,Allocator>::npos;
|
3080
|
-
|
3081
3088
|
template<class S>
|
3082
3089
|
struct is_string
|
3083
3090
|
{
|
3084
|
-
|
3091
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
3085
3092
|
};
|
3086
3093
|
|
3087
3094
|
template<class C, class T, class A>
|
3088
3095
|
struct is_string< basic_string<C, T, A> >
|
3089
3096
|
{
|
3090
|
-
|
3097
|
+
BOOST_STATIC_CONSTEXPR bool value = true;
|
3091
3098
|
};
|
3092
3099
|
|
3093
3100
|
#endif
|
@@ -3572,8 +3579,9 @@ struct has_trivial_destructor_after_move<boost::container::basic_string<C, T, Al
|
|
3572
3579
|
{
|
3573
3580
|
typedef typename boost::container::basic_string<C, T, Allocator>::allocator_type allocator_type;
|
3574
3581
|
typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
|
3575
|
-
|
3576
|
-
|
3582
|
+
BOOST_STATIC_CONSTEXPR bool value =
|
3583
|
+
::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
3584
|
+
::boost::has_trivial_destructor_after_move<pointer>::value;
|
3577
3585
|
};
|
3578
3586
|
|
3579
3587
|
}
|
@@ -58,7 +58,7 @@ namespace container {
|
|
58
58
|
//! to detect if a type should be constructed with suffix or prefix allocator arguments.
|
59
59
|
template <class T>
|
60
60
|
struct constructible_with_allocator_suffix
|
61
|
-
{
|
61
|
+
{ BOOST_STATIC_CONSTEXPR bool value = false; };
|
62
62
|
|
63
63
|
//! <b>Remark</b>: if a specialization constructible_with_allocator_prefix<X>::value is true, indicates that T may be constructed
|
64
64
|
//! with allocator_arg and T::allocator_type as its first two constructor arguments.
|
@@ -108,7 +108,7 @@ struct constructible_with_allocator_suffix
|
|
108
108
|
//! to detect if a type should be constructed with suffix or prefix allocator arguments.
|
109
109
|
template <class T>
|
110
110
|
struct constructible_with_allocator_prefix
|
111
|
-
{
|
111
|
+
{ BOOST_STATIC_CONSTEXPR bool value = false; };
|
112
112
|
|
113
113
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
114
114
|
|
@@ -142,7 +142,7 @@ struct uses_allocator_imp
|
|
142
142
|
static Allocator alloc; // Declared but not defined
|
143
143
|
|
144
144
|
public:
|
145
|
-
|
145
|
+
BOOST_STATIC_CONSTEXPR bool value = sizeof(test<T>(alloc)) == sizeof(yes_type);
|
146
146
|
};
|
147
147
|
|
148
148
|
} //namespace dtl {
|