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