passenger 6.2.1 → 6.2.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG +37 -15
- data/build/cxx_tests.rb +2 -0
- data/build/support/cxx_dependency_map.rb +3 -63
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Shared/ApiServerUtils.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/apache2_module/Hooks.cpp +13 -0
- data/src/apache2_module/Utils.h +14 -0
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/FileTools/FileManip.cpp +27 -3
- data/src/cxx_supportlib/InstanceDirectory.h +30 -3
- data/src/cxx_supportlib/ServerKit/Errors.h +1 -1
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +1 -1
- data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +1 -1
- data/src/cxx_supportlib/ServerKit/HttpRequest.h +1 -1
- data/src/cxx_supportlib/ServerKit/llerrors.h +3 -3
- data/src/cxx_supportlib/ServerKit/llversion.h +1 -1
- data/src/cxx_supportlib/{ServerKit/llhttp_api.c → vendor-copy/llhttp/api.c} +30 -23
- data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.c +1756 -1645
- data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.h +35 -13
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +57 -53
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +14 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +176 -2287
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +13 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +186 -70
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/aligned_allocation.hpp +149 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/bit_utilities.hpp +133 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +20 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/deque_impl.hpp +2744 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +202 -104
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +161 -85
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_constructible.hpp +180 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +18 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +256 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +75 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +1 -56
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +16 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/range_utils.hpp +196 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +124 -69
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +109 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +168 -162
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/nest.hpp +2978 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/pmr/nest.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_all_of.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_any_of.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy.hpp +229 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_if.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_n.hpp +308 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count_if.hpp +100 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_equal.hpp +268 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill_n.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find.hpp +110 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if.hpp +110 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if_not.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last.hpp +179 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if.hpp +179 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if_not.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_for_each.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate_n.hpp +162 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_partitioned.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted_until.hpp +169 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp +382 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_merge.hpp +428 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_mismatch.hpp +350 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_none_of.hpp +98 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_copy.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_point.hpp +116 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy.hpp +207 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy_if.hpp +223 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_if.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace_if.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse.hpp +245 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse_copy.hpp +229 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search.hpp +211 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search_n.hpp +476 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_difference.hpp +300 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_intersection.hpp +287 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_symmetric_difference.hpp +306 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_union.hpp +294 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_stable_partition.hpp +153 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_swap_ranges.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_transform.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/wrapped_iterator.hpp +142 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +642 -417
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +141 -30
- data/src/cxx_supportlib/vendor-modified/boost/container/hub.hpp +2426 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +65 -57
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +247 -68
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +39 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +156 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/hub.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/segtor.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/segtor.hpp +905 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +148 -35
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +59 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +632 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +66 -60
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +46 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +612 -317
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +54 -111
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_construction.hpp +100 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +233 -116
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +17 -10
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/encoder.hpp +114 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +211 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +29 -174
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +18 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +20 -11
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +42 -14
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +58 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +8 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/config.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +15 -7
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +23 -11
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +11 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/{detail → lexical_cast/detail}/lcast_precision.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +15 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +48 -46
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +12 -4
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +76 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +58 -37
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +17 -9
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_common_defs.hpp +188 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_nonmember_interface.hpp +117 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +108 -83
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +39 -39
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_select_implementation.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/union_optional.hpp +724 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +93 -220
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +14 -4
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -6
- data/src/cxx_supportlib/vendor-modified/boost/system/api_config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +30 -28
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +26 -26
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +196 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +191 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +196 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +192 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +52 -16
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/ranges_support.hpp +104 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +1 -14
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unordered_printers.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +121 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +118 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +338 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +121 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +118 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +333 -1
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +276 -143
- data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +1262 -771
- data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1704 -1586
- data/src/nginx_module/ContentHandler.c +35 -0
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +6 -6
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +25 -2
- data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +12 -1
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- metadata +73 -8
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +0 -41
- /data/src/cxx_supportlib/{ServerKit/llhttp_http.c → vendor-copy/llhttp/http.c} +0 -0
|
@@ -47,6 +47,7 @@ template< std::size_t NodeSize
|
|
|
47
47
|
, std::size_t NodesPerBlock
|
|
48
48
|
, std::size_t MaxFreeBlocks
|
|
49
49
|
, std::size_t OverheadPercent
|
|
50
|
+
, std::size_t NodeAlign
|
|
50
51
|
>
|
|
51
52
|
class private_adaptive_node_pool
|
|
52
53
|
: public private_adaptive_node_pool_impl_ct
|
|
@@ -55,6 +56,7 @@ class private_adaptive_node_pool
|
|
|
55
56
|
, NodeSize
|
|
56
57
|
, NodesPerBlock
|
|
57
58
|
, OverheadPercent
|
|
59
|
+
, NodeAlign
|
|
58
60
|
, unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only
|
|
59
61
|
| ::boost::container::adaptive_pool_flag::size_ordered
|
|
60
62
|
| ::boost::container::adaptive_pool_flag::address_ordered
|
|
@@ -66,6 +68,7 @@ class private_adaptive_node_pool
|
|
|
66
68
|
, NodeSize
|
|
67
69
|
, NodesPerBlock
|
|
68
70
|
, OverheadPercent
|
|
71
|
+
, NodeAlign
|
|
69
72
|
, unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only
|
|
70
73
|
| ::boost::container::adaptive_pool_flag::size_ordered
|
|
71
74
|
| ::boost::container::adaptive_pool_flag::address_ordered
|
|
@@ -92,20 +95,21 @@ template< std::size_t NodeSize
|
|
|
92
95
|
, std::size_t NodesPerBlock
|
|
93
96
|
, std::size_t MaxFreeBlocks
|
|
94
97
|
, std::size_t OverheadPercent
|
|
98
|
+
, std::size_t NodeAlign = 0
|
|
95
99
|
>
|
|
96
100
|
class shared_adaptive_node_pool
|
|
97
101
|
: public private_adaptive_node_pool
|
|
98
|
-
<NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
|
|
102
|
+
<NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent, NodeAlign>
|
|
99
103
|
{
|
|
100
104
|
private:
|
|
101
105
|
typedef private_adaptive_node_pool
|
|
102
|
-
<NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
|
|
106
|
+
<NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent, NodeAlign> private_adaptive_node_pool_t;
|
|
103
107
|
public:
|
|
104
|
-
typedef typename
|
|
108
|
+
typedef typename private_adaptive_node_pool_t::multiallocation_chain multiallocation_chain;
|
|
105
109
|
|
|
106
110
|
//!Constructor. Never throws
|
|
107
111
|
shared_adaptive_node_pool()
|
|
108
|
-
:
|
|
112
|
+
: private_adaptive_node_pool_t(){}
|
|
109
113
|
|
|
110
114
|
//!Destructor. Deallocates all allocated blocks. Never throws
|
|
111
115
|
~shared_adaptive_node_pool()
|
|
@@ -117,7 +121,7 @@ class shared_adaptive_node_pool
|
|
|
117
121
|
//-----------------------
|
|
118
122
|
scoped_lock<default_mutex> guard(mutex_);
|
|
119
123
|
//-----------------------
|
|
120
|
-
return
|
|
124
|
+
return private_adaptive_node_pool_t::allocate_node();
|
|
121
125
|
}
|
|
122
126
|
|
|
123
127
|
//!Deallocates an array pointed by ptr. Never throws
|
|
@@ -126,7 +130,7 @@ class shared_adaptive_node_pool
|
|
|
126
130
|
//-----------------------
|
|
127
131
|
scoped_lock<default_mutex> guard(mutex_);
|
|
128
132
|
//-----------------------
|
|
129
|
-
|
|
133
|
+
private_adaptive_node_pool_t::deallocate_node(ptr);
|
|
130
134
|
}
|
|
131
135
|
|
|
132
136
|
//!Allocates a singly linked list of n nodes ending in null pointer.
|
|
@@ -136,7 +140,7 @@ class shared_adaptive_node_pool
|
|
|
136
140
|
//-----------------------
|
|
137
141
|
scoped_lock<default_mutex> guard(mutex_);
|
|
138
142
|
//-----------------------
|
|
139
|
-
return
|
|
143
|
+
return private_adaptive_node_pool_t::allocate_nodes(n, chain);
|
|
140
144
|
}
|
|
141
145
|
|
|
142
146
|
void deallocate_nodes(multiallocation_chain &chain)
|
|
@@ -144,7 +148,7 @@ class shared_adaptive_node_pool
|
|
|
144
148
|
//-----------------------
|
|
145
149
|
scoped_lock<default_mutex> guard(mutex_);
|
|
146
150
|
//-----------------------
|
|
147
|
-
|
|
151
|
+
private_adaptive_node_pool_t::deallocate_nodes(chain);
|
|
148
152
|
}
|
|
149
153
|
|
|
150
154
|
//!Deallocates all the free blocks of memory. Never throws
|
|
@@ -153,7 +157,7 @@ class shared_adaptive_node_pool
|
|
|
153
157
|
//-----------------------
|
|
154
158
|
scoped_lock<default_mutex> guard(mutex_);
|
|
155
159
|
//-----------------------
|
|
156
|
-
|
|
160
|
+
private_adaptive_node_pool_t::deallocate_free_blocks();
|
|
157
161
|
}
|
|
158
162
|
|
|
159
163
|
private:
|
|
@@ -35,6 +35,8 @@
|
|
|
35
35
|
#include <boost/move/detail/to_raw_pointer.hpp>
|
|
36
36
|
#include <boost/move/detail/force_ptr.hpp>
|
|
37
37
|
#include <boost/container/detail/type_traits.hpp>
|
|
38
|
+
#include <boost/container/detail/node_pool_impl.hpp>
|
|
39
|
+
|
|
38
40
|
// intrusive
|
|
39
41
|
#include <boost/intrusive/pointer_traits.hpp>
|
|
40
42
|
#include <boost/intrusive/set.hpp>
|
|
@@ -375,6 +377,7 @@ inline void candidate_power_of_2_rt ( std::size_t initial_alignment
|
|
|
375
377
|
, std::size_t &num_subblocks
|
|
376
378
|
, std::size_t &real_num_node)
|
|
377
379
|
{
|
|
380
|
+
|
|
378
381
|
bool overhead_satisfied = false;
|
|
379
382
|
std::size_t num_b_subblock = 0;
|
|
380
383
|
std::size_t total_nodes = 0;
|
|
@@ -453,9 +456,27 @@ class private_adaptive_node_pool_impl_common
|
|
|
453
456
|
typedef typename adaptive_pool_types_t::hdr_offset_holder hdr_offset_holder;
|
|
454
457
|
typedef private_adaptive_node_pool_impl_common this_type;
|
|
455
458
|
|
|
456
|
-
BOOST_STATIC_CONSTEXPR size_type MaxAlign = alignment_of<void_pointer>::value;
|
|
457
|
-
BOOST_STATIC_CONSTEXPR size_type HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign;
|
|
458
|
-
BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign;
|
|
459
|
+
//BOOST_STATIC_CONSTEXPR size_type MaxAlign = alignment_of<void_pointer>::value;
|
|
460
|
+
//BOOST_STATIC_CONSTEXPR size_type HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign;
|
|
461
|
+
//BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign;
|
|
462
|
+
|
|
463
|
+
static size_type get_hdr_size(size_type real_node_align)
|
|
464
|
+
{ return ((sizeof(block_info_t)-1)/real_node_align+1)*real_node_align; }
|
|
465
|
+
|
|
466
|
+
static size_type get_hdr_off_size(size_type real_node_align)
|
|
467
|
+
{ return ((sizeof(hdr_offset_holder)-1)/real_node_align+1)*real_node_align; }
|
|
468
|
+
|
|
469
|
+
template<size_type RealNodeAlign>
|
|
470
|
+
struct get_hdr_size_ct
|
|
471
|
+
{
|
|
472
|
+
BOOST_STATIC_CONSTEXPR size_type value = ((sizeof(block_info_t) - 1)/RealNodeAlign + 1)*RealNodeAlign;
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
template<size_type RealNodeAlign>
|
|
476
|
+
struct get_hdr_off_size_ct
|
|
477
|
+
{
|
|
478
|
+
BOOST_STATIC_CONSTEXPR size_type value = ((sizeof(hdr_offset_holder) - 1)/RealNodeAlign + 1)*RealNodeAlign;
|
|
479
|
+
};
|
|
459
480
|
|
|
460
481
|
segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager
|
|
461
482
|
block_container_t m_block_container; //Intrusive block list
|
|
@@ -544,6 +565,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
544
565
|
}
|
|
545
566
|
}
|
|
546
567
|
}
|
|
568
|
+
(void)total_free_blocks;
|
|
547
569
|
BOOST_ASSERT(total_free_blocks == m_totally_free_blocks);
|
|
548
570
|
BOOST_ASSERT(total_free_nodes >= m_totally_free_blocks*real_num_node);
|
|
549
571
|
}
|
|
@@ -644,6 +666,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
644
666
|
, const size_type max_free_blocks
|
|
645
667
|
, const size_type real_block_alignment, const size_type real_node_size
|
|
646
668
|
, const size_type real_num_node, const size_type num_subblocks
|
|
669
|
+
, const size_type real_node_align
|
|
647
670
|
, AlignOnlyTrue)
|
|
648
671
|
{
|
|
649
672
|
(void)num_subblocks;
|
|
@@ -660,11 +683,11 @@ class private_adaptive_node_pool_impl_common
|
|
|
660
683
|
if(!mem_address){
|
|
661
684
|
//In case of error, free memory deallocating all nodes (the new ones allocated
|
|
662
685
|
//in this function plus previously stored nodes in chain).
|
|
663
|
-
this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment);
|
|
686
|
+
this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment, real_node_align);
|
|
664
687
|
throw_bad_alloc();
|
|
665
688
|
}
|
|
666
|
-
block_info_t &c_info = *new(mem_address, boost_container_new_t())block_info_t();
|
|
667
|
-
mem_address +=
|
|
689
|
+
block_info_t &c_info = *new(mem_address, boost_container_new_t()) block_info_t();
|
|
690
|
+
mem_address += get_hdr_size(real_node_align);
|
|
668
691
|
this->priv_fill_chain_remaining_to_block(chain, target_elem_in_chain, c_info, mem_address, real_num_node, real_node_size);
|
|
669
692
|
const size_type free_nodes = c_info.free_nodes.size();
|
|
670
693
|
if(free_nodes){
|
|
@@ -680,15 +703,18 @@ class private_adaptive_node_pool_impl_common
|
|
|
680
703
|
, const size_type max_free_blocks
|
|
681
704
|
, const size_type real_block_alignment, const size_type real_node_size
|
|
682
705
|
, const size_type real_num_node, const size_type num_subblocks
|
|
706
|
+
, const size_type real_node_align
|
|
683
707
|
, AlignOnlyFalse)
|
|
684
708
|
{
|
|
685
709
|
BOOST_ASSERT(m_block_container.empty());
|
|
686
710
|
BOOST_ASSERT(min_elements > 0);
|
|
687
711
|
const size_type n = (min_elements - 1)/real_num_node + 1;
|
|
688
712
|
const size_type real_block_size = real_block_alignment*num_subblocks - PayloadPerAllocation;
|
|
689
|
-
const size_type
|
|
690
|
-
const size_type
|
|
691
|
-
const size_type
|
|
713
|
+
const size_type hdr_size = get_hdr_size(real_node_align);
|
|
714
|
+
const size_type hdr_off_size = get_hdr_off_size(real_node_align);
|
|
715
|
+
const size_type elements_per_subblock_mid = (real_block_alignment - hdr_off_size)/real_node_size;
|
|
716
|
+
const size_type elements_per_subblock_end = (real_block_alignment - hdr_off_size - PayloadPerAllocation) / real_node_size;
|
|
717
|
+
const size_type hdr_subblock_elements = (real_block_alignment - hdr_size - PayloadPerAllocation)/real_node_size;
|
|
692
718
|
const size_type target_elem_in_chain = chain.size() + min_elements;
|
|
693
719
|
|
|
694
720
|
for(size_type i = 0; i != n; ++i){
|
|
@@ -699,12 +725,12 @@ class private_adaptive_node_pool_impl_common
|
|
|
699
725
|
if(!mem_address){
|
|
700
726
|
//In case of error, free memory deallocating all nodes (the new ones allocated
|
|
701
727
|
//in this function plus previously stored nodes in chain).
|
|
702
|
-
this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment);
|
|
728
|
+
this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment, real_node_align);
|
|
703
729
|
throw_bad_alloc();
|
|
704
730
|
}
|
|
705
731
|
//First initialize header information on the last subblock
|
|
706
732
|
char *hdr_addr = mem_address + real_block_alignment*(num_subblocks-1);
|
|
707
|
-
block_info_t &c_info = *new(hdr_addr, boost_container_new_t())block_info_t();
|
|
733
|
+
block_info_t &c_info = *new(hdr_addr, boost_container_new_t()) block_info_t();
|
|
708
734
|
//Some structural checks
|
|
709
735
|
BOOST_ASSERT(static_cast<void*>(&static_cast<hdr_offset_holder&>(c_info).hdr_offset) ==
|
|
710
736
|
static_cast<void*>(&c_info)); (void)c_info;
|
|
@@ -715,10 +741,10 @@ class private_adaptive_node_pool_impl_common
|
|
|
715
741
|
new(mem_address, boost_container_new_t()) hdr_offset_holder(size_type(hdr_addr - mem_address));
|
|
716
742
|
const size_type elements_per_subblock = (subblock != (maxsubblock - 1)) ? elements_per_subblock_mid : elements_per_subblock_end;
|
|
717
743
|
this->priv_fill_chain_remaining_to_block
|
|
718
|
-
(chain, target_elem_in_chain, c_info, mem_address +
|
|
744
|
+
(chain, target_elem_in_chain, c_info, mem_address + hdr_off_size, elements_per_subblock, real_node_size);
|
|
719
745
|
}
|
|
720
746
|
this->priv_fill_chain_remaining_to_block
|
|
721
|
-
(chain, target_elem_in_chain, c_info, hdr_addr +
|
|
747
|
+
(chain, target_elem_in_chain, c_info, hdr_addr + hdr_size, hdr_subblock_elements, real_node_size);
|
|
722
748
|
m_totally_free_blocks += static_cast<size_type>(c_info.free_nodes.size() == real_num_node);
|
|
723
749
|
if (c_info.free_nodes.size())
|
|
724
750
|
m_block_container.push_front(c_info);
|
|
@@ -727,7 +753,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
727
753
|
|
|
728
754
|
//!Allocates array of count elements. Can throw
|
|
729
755
|
void *priv_allocate_node( const size_type max_free_blocks, const size_type real_block_alignment, const size_type real_node_size
|
|
730
|
-
, const size_type real_num_node, const size_type num_subblocks)
|
|
756
|
+
, const size_type real_num_node, const size_type num_subblocks, const size_type real_node_align)
|
|
731
757
|
{
|
|
732
758
|
this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
|
|
733
759
|
//If there are no free nodes we allocate a new block
|
|
@@ -747,7 +773,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
747
773
|
else{
|
|
748
774
|
multiallocation_chain chain;
|
|
749
775
|
this->priv_append_from_new_blocks
|
|
750
|
-
(1, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, IsAlignOnly());
|
|
776
|
+
(1, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, real_node_align, IsAlignOnly());
|
|
751
777
|
void *node = boost::movelib::to_raw_pointer(chain.pop_front());
|
|
752
778
|
this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
|
|
753
779
|
return node;
|
|
@@ -756,7 +782,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
756
782
|
|
|
757
783
|
void priv_allocate_nodes( const size_type n, multiallocation_chain &chain
|
|
758
784
|
, const size_type max_free_blocks, const size_type real_block_alignment, const size_type real_node_size
|
|
759
|
-
, const size_type real_num_node, const size_type num_subblocks)
|
|
785
|
+
, const size_type real_num_node, const size_type num_subblocks, const size_type real_node_align)
|
|
760
786
|
{
|
|
761
787
|
size_type i = 0;
|
|
762
788
|
BOOST_CONTAINER_TRY{
|
|
@@ -765,7 +791,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
765
791
|
//If there are no free nodes we allocate all needed blocks
|
|
766
792
|
if (m_block_container.empty()){
|
|
767
793
|
this->priv_append_from_new_blocks
|
|
768
|
-
(n - i, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, IsAlignOnly());
|
|
794
|
+
(n - i, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, real_node_align, IsAlignOnly());
|
|
769
795
|
BOOST_ASSERT(m_block_container.empty() || (++m_block_container.cbegin() == m_block_container.cend()));
|
|
770
796
|
BOOST_ASSERT(chain.size() == n);
|
|
771
797
|
break;
|
|
@@ -800,7 +826,7 @@ class private_adaptive_node_pool_impl_common
|
|
|
800
826
|
}
|
|
801
827
|
}
|
|
802
828
|
BOOST_CONTAINER_CATCH(...){
|
|
803
|
-
this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment);
|
|
829
|
+
this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment, real_node_align);
|
|
804
830
|
this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
|
|
805
831
|
BOOST_CONTAINER_RETHROW
|
|
806
832
|
}
|
|
@@ -811,7 +837,8 @@ class private_adaptive_node_pool_impl_common
|
|
|
811
837
|
//!Deallocates an array pointed by ptr. Never throws
|
|
812
838
|
void priv_deallocate_node( void *pElem
|
|
813
839
|
, const size_type max_free_blocks, const size_type real_num_node
|
|
814
|
-
, const size_type num_subblocks, const size_type real_block_alignment
|
|
840
|
+
, const size_type num_subblocks, const size_type real_block_alignment
|
|
841
|
+
, const size_type /*real_node_align*/)
|
|
815
842
|
{
|
|
816
843
|
this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
|
|
817
844
|
block_info_t &block_info = *this->priv_block_from_node(pElem, real_block_alignment);
|
|
@@ -829,7 +856,8 @@ class private_adaptive_node_pool_impl_common
|
|
|
829
856
|
|
|
830
857
|
void priv_deallocate_nodes( multiallocation_chain &nodes
|
|
831
858
|
, const size_type max_free_blocks, const size_type real_num_node
|
|
832
|
-
, const size_type num_subblocks, const size_type real_block_alignment
|
|
859
|
+
, const size_type num_subblocks, const size_type real_block_alignment
|
|
860
|
+
, const size_type /*real_node_align*/)
|
|
833
861
|
{
|
|
834
862
|
this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
|
|
835
863
|
//To take advantage of node locality, wait until two
|
|
@@ -978,10 +1006,12 @@ template< class SizeType
|
|
|
978
1006
|
, std::size_t NodesPerBlock
|
|
979
1007
|
, std::size_t HdrOffsetSize
|
|
980
1008
|
, std::size_t OverheadPercent
|
|
1009
|
+
, std::size_t NodeAlign
|
|
981
1010
|
, bool AlignOnly>
|
|
982
1011
|
struct calculate_alignment_ct
|
|
983
1012
|
{
|
|
984
|
-
BOOST_STATIC_CONSTEXPR std::size_t
|
|
1013
|
+
BOOST_STATIC_CONSTEXPR std::size_t initial_alignment = upper_power_of_2_ct<SizeType, HdrSize + RealNodeSize*NodesPerBlock>::value;
|
|
1014
|
+
BOOST_STATIC_CONSTEXPR std::size_t alignment = NodeAlign > initial_alignment ? NodeAlign : initial_alignment;
|
|
985
1015
|
BOOST_STATIC_CONSTEXPR std::size_t num_subblocks = 0;
|
|
986
1016
|
BOOST_STATIC_CONSTEXPR std::size_t real_num_node = (alignment - PayloadPerAllocation - HdrSize)/RealNodeSize;
|
|
987
1017
|
};
|
|
@@ -992,7 +1022,9 @@ template< class SizeType
|
|
|
992
1022
|
, std::size_t RealNodeSize
|
|
993
1023
|
, std::size_t NodesPerBlock
|
|
994
1024
|
, std::size_t HdrOffsetSize
|
|
995
|
-
, std::size_t OverheadPercent
|
|
1025
|
+
, std::size_t OverheadPercent
|
|
1026
|
+
, std::size_t NodeAlign
|
|
1027
|
+
>
|
|
996
1028
|
struct calculate_alignment_ct
|
|
997
1029
|
< SizeType
|
|
998
1030
|
, HdrSize
|
|
@@ -1001,10 +1033,14 @@ struct calculate_alignment_ct
|
|
|
1001
1033
|
, NodesPerBlock
|
|
1002
1034
|
, HdrOffsetSize
|
|
1003
1035
|
, OverheadPercent
|
|
1036
|
+
, NodeAlign
|
|
1004
1037
|
, false>
|
|
1005
1038
|
{
|
|
1039
|
+
BOOST_STATIC_CONSTEXPR std::size_t proposed_alignment = upper_power_of_2_ct<SizeType, HdrSize + PayloadPerAllocation + RealNodeSize>::value;
|
|
1040
|
+
BOOST_STATIC_CONSTEXPR std::size_t initial_alignment = NodeAlign > proposed_alignment ? NodeAlign : proposed_alignment;
|
|
1041
|
+
|
|
1006
1042
|
typedef typename candidate_power_of_2_ct
|
|
1007
|
-
<
|
|
1043
|
+
< initial_alignment
|
|
1008
1044
|
, RealNodeSize
|
|
1009
1045
|
, PayloadPerAllocation
|
|
1010
1046
|
, NodesPerBlock
|
|
@@ -1029,6 +1065,7 @@ template< class SegmentManagerBase
|
|
|
1029
1065
|
, std::size_t NodeSize
|
|
1030
1066
|
, std::size_t NodesPerBlock
|
|
1031
1067
|
, std::size_t OverheadPercent
|
|
1068
|
+
, std::size_t InitialNodeAlign
|
|
1032
1069
|
, unsigned int Flags>
|
|
1033
1070
|
class private_adaptive_node_pool_impl_ct
|
|
1034
1071
|
: public private_adaptive_node_pool_impl_common<SegmentManagerBase, Flags>
|
|
@@ -1052,15 +1089,17 @@ class private_adaptive_node_pool_impl_ct
|
|
|
1052
1089
|
BOOST_STATIC_CONSTEXPR bool AlignOnly = base_t::AlignOnly;
|
|
1053
1090
|
|
|
1054
1091
|
private:
|
|
1055
|
-
BOOST_STATIC_CONSTEXPR size_type
|
|
1056
|
-
BOOST_STATIC_CONSTEXPR size_type
|
|
1057
|
-
BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = base_t::HdrOffsetSize;
|
|
1092
|
+
BOOST_STATIC_CONSTEXPR size_type VoidPtrAlign = alignment_of<void_pointer>::value;
|
|
1093
|
+
BOOST_STATIC_CONSTEXPR size_type RealNodeAlign = InitialNodeAlign > VoidPtrAlign ? InitialNodeAlign : VoidPtrAlign;
|
|
1058
1094
|
|
|
1059
|
-
BOOST_STATIC_CONSTEXPR size_type
|
|
1095
|
+
BOOST_STATIC_CONSTEXPR size_type RealNodePtrAlign = lcm_ct <NodeSize, VoidPtrAlign>::value;
|
|
1096
|
+
BOOST_STATIC_CONSTEXPR size_type RealNodeSize = lcm_ct< RealNodePtrAlign, RealNodeAlign>::value;
|
|
1097
|
+
BOOST_STATIC_CONSTEXPR size_type HdrSize = base_t::template get_hdr_size_ct<RealNodeAlign>::value;
|
|
1098
|
+
BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = base_t::template get_hdr_off_size_ct<RealNodeAlign>::value;
|
|
1060
1099
|
|
|
1061
1100
|
typedef calculate_alignment_ct
|
|
1062
1101
|
< size_type, HdrSize, PayloadPerAllocation
|
|
1063
|
-
, RealNodeSize, NodesPerBlock, HdrOffsetSize, OverheadPercent, AlignOnly> data_t;
|
|
1102
|
+
, RealNodeSize, NodesPerBlock, HdrOffsetSize, OverheadPercent, RealNodeAlign, AlignOnly> data_t;
|
|
1064
1103
|
|
|
1065
1104
|
//Round the size to a power of two value.
|
|
1066
1105
|
//This is the total memory size (including payload) that we want to
|
|
@@ -1088,7 +1127,7 @@ class private_adaptive_node_pool_impl_ct
|
|
|
1088
1127
|
void *allocate_node()
|
|
1089
1128
|
{
|
|
1090
1129
|
return this->priv_allocate_node
|
|
1091
|
-
(MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks);
|
|
1130
|
+
(MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks, RealNodeAlign);
|
|
1092
1131
|
}
|
|
1093
1132
|
|
|
1094
1133
|
//!Allocates n nodes.
|
|
@@ -1096,19 +1135,19 @@ class private_adaptive_node_pool_impl_ct
|
|
|
1096
1135
|
void allocate_nodes(const size_type n, multiallocation_chain &chain)
|
|
1097
1136
|
{
|
|
1098
1137
|
this->priv_allocate_nodes
|
|
1099
|
-
(n, chain, MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks);
|
|
1138
|
+
(n, chain, MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks, RealNodeAlign);
|
|
1100
1139
|
}
|
|
1101
1140
|
|
|
1102
1141
|
//!Deallocates an array pointed by ptr. Never throws
|
|
1103
1142
|
void deallocate_node(void *pElem)
|
|
1104
1143
|
{
|
|
1105
|
-
this->priv_deallocate_node(pElem, MaxFreeBlocks, RealNumNode, NumSubBlocks, RealBlockAlignment);
|
|
1144
|
+
this->priv_deallocate_node(pElem, MaxFreeBlocks, RealNumNode, NumSubBlocks, RealBlockAlignment, RealNodeAlign);
|
|
1106
1145
|
}
|
|
1107
1146
|
|
|
1108
1147
|
//!Deallocates a linked list of nodes. Never throws
|
|
1109
1148
|
void deallocate_nodes(multiallocation_chain &nodes)
|
|
1110
1149
|
{
|
|
1111
|
-
this->priv_deallocate_nodes(nodes, MaxFreeBlocks, RealNumNode, NumSubBlocks, data_t::alignment);
|
|
1150
|
+
this->priv_deallocate_nodes(nodes, MaxFreeBlocks, RealNumNode, NumSubBlocks, data_t::alignment, RealNodeAlign);
|
|
1112
1151
|
}
|
|
1113
1152
|
|
|
1114
1153
|
void deallocate_free_blocks()
|
|
@@ -1129,20 +1168,76 @@ struct private_adaptive_node_pool_impl_rt_data
|
|
|
1129
1168
|
{
|
|
1130
1169
|
typedef SizeType size_type;
|
|
1131
1170
|
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1171
|
+
BOOST_STATIC_CONSTEXPR size_type PtrAlign = alignment_of<void*>::value;
|
|
1172
|
+
BOOST_STATIC_CONSTEXPR size_type PtrAlignBits
|
|
1173
|
+
= boost::container::dtl::log2_pow2<PtrAlign>::value;
|
|
1174
|
+
|
|
1175
|
+
typedef packed_3n_bits_ref<PtrAlignBits, size_type> packed_bits_t;
|
|
1176
|
+
|
|
1177
|
+
private_adaptive_node_pool_impl_rt_data(size_type max_free_blocks)
|
|
1178
|
+
: m_max_free_blocks(max_free_blocks)
|
|
1179
|
+
, m_packed_low()
|
|
1180
|
+
, m_real_block_alignment()
|
|
1181
|
+
, m_packed_high1()
|
|
1182
|
+
, m_packed_high2()
|
|
1135
1183
|
{}
|
|
1136
1184
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1185
|
+
void set_node_alignment(size_type alignment)
|
|
1186
|
+
{
|
|
1187
|
+
const size_type aligned_multiplier = alignment/PtrAlign;
|
|
1188
|
+
const size_type aligned_shift = log2_ceil<size_type>(aligned_multiplier);
|
|
1189
|
+
return packed_bits().store(aligned_shift);
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
size_type get_node_alignment() const
|
|
1193
|
+
{ return PtrAlign << packed_bits().load(); }
|
|
1194
|
+
|
|
1195
|
+
size_type get_max_free_blocks() const
|
|
1196
|
+
{ return m_max_free_blocks; }
|
|
1197
|
+
|
|
1198
|
+
size_type get_real_block_alignment() const
|
|
1199
|
+
{ return m_real_block_alignment; }
|
|
1200
|
+
|
|
1201
|
+
size_type get_real_node_size() const
|
|
1202
|
+
{ return packed_bits().low_unpacked(); }
|
|
1203
|
+
|
|
1204
|
+
size_type get_num_subblocks() const
|
|
1205
|
+
{ return packed_bits().high1_unpacked(); }
|
|
1206
|
+
|
|
1207
|
+
size_type get_real_num_node() const
|
|
1208
|
+
{ return packed_bits().high2_unpacked(); }
|
|
1209
|
+
|
|
1210
|
+
void set_real_block_alignment(size_type v)
|
|
1211
|
+
{ m_real_block_alignment = v; }
|
|
1212
|
+
|
|
1213
|
+
void set_real_node_size(size_type v)
|
|
1214
|
+
{ packed_bits().set_low_unpacked(v); }
|
|
1215
|
+
|
|
1216
|
+
void set_num_subblocks(size_type v)
|
|
1217
|
+
{ packed_bits().set_high1_unpacked(v); }
|
|
1218
|
+
|
|
1219
|
+
void set_real_num_node(size_type v)
|
|
1220
|
+
{ packed_bits().set_high2_unpacked(v); }
|
|
1221
|
+
|
|
1222
|
+
private:
|
|
1223
|
+
packed_bits_t packed_bits()
|
|
1224
|
+
{
|
|
1225
|
+
return packed_bits_t(m_packed_low, m_packed_high1, m_packed_high2);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
const packed_bits_t packed_bits() const
|
|
1229
|
+
{
|
|
1230
|
+
return packed_bits_t(const_cast<size_type&>(m_packed_low),
|
|
1231
|
+
const_cast<size_type&>(m_packed_high1),
|
|
1232
|
+
const_cast<size_type&>(m_packed_high2));
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
//Maintain info from original members before bit-packing, to avoid breaking ABI
|
|
1236
|
+
const size_type m_max_free_blocks; //No changes
|
|
1237
|
+
size_type m_packed_low; // stores "m_real_node_size" in low N bits
|
|
1238
|
+
size_type m_real_block_alignment; //No changes
|
|
1239
|
+
size_type m_packed_high1; // stores "m_num_subblocks"in high N bits
|
|
1240
|
+
size_type m_packed_high2; // stores "m_real_num_node" in high N bits
|
|
1146
1241
|
};
|
|
1147
1242
|
|
|
1148
1243
|
|
|
@@ -1171,8 +1266,11 @@ class private_adaptive_node_pool_impl_rt
|
|
|
1171
1266
|
//align_only
|
|
1172
1267
|
BOOST_STATIC_CONSTEXPR bool AlignOnly = impl_t::AlignOnly;
|
|
1173
1268
|
|
|
1174
|
-
BOOST_STATIC_CONSTEXPR size_type HdrSize = impl_t::HdrSize;
|
|
1175
|
-
BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = impl_t::HdrOffsetSize;
|
|
1269
|
+
//BOOST_STATIC_CONSTEXPR size_type HdrSize = impl_t::HdrSize;
|
|
1270
|
+
//BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = impl_t::HdrOffsetSize;
|
|
1271
|
+
|
|
1272
|
+
using impl_t::get_hdr_size;
|
|
1273
|
+
using impl_t::get_hdr_off_size;
|
|
1176
1274
|
|
|
1177
1275
|
public:
|
|
1178
1276
|
|
|
@@ -1186,40 +1284,59 @@ class private_adaptive_node_pool_impl_rt
|
|
|
1186
1284
|
, size_type nodes_per_block
|
|
1187
1285
|
, size_type max_free_blocks
|
|
1188
1286
|
, unsigned char overhead_percent
|
|
1287
|
+
, size_type node_align
|
|
1189
1288
|
)
|
|
1190
|
-
: data_t(max_free_blocks
|
|
1289
|
+
: data_t(max_free_blocks)
|
|
1191
1290
|
, impl_t(segment_mngr_base)
|
|
1192
1291
|
{
|
|
1292
|
+
if (node_align < alignment_of<void_pointer>::value)
|
|
1293
|
+
node_align = alignment_of<void_pointer>::value;
|
|
1294
|
+
node_size = lcm(node_size, node_align);
|
|
1295
|
+
this->data_t::set_real_node_size(node_size);
|
|
1296
|
+
this->data_t::set_node_alignment(node_align);
|
|
1297
|
+
|
|
1298
|
+
const size_type hdr_size = get_hdr_size(node_align);
|
|
1193
1299
|
if(AlignOnly){
|
|
1194
|
-
this->
|
|
1195
|
-
this->
|
|
1300
|
+
this->data_t::set_real_block_alignment(upper_power_of_2(hdr_size + this->get_real_node_size() * nodes_per_block));
|
|
1301
|
+
this->data_t::set_real_num_node((this->get_real_block_alignment() - PayloadPerAllocation - hdr_size)/this->get_real_node_size());
|
|
1196
1302
|
}
|
|
1197
1303
|
else{
|
|
1198
|
-
|
|
1199
|
-
|
|
1304
|
+
size_type real_block_alignment = 0;
|
|
1305
|
+
size_type num_subblocks = 0;
|
|
1306
|
+
size_type real_num_node = 0;
|
|
1307
|
+
const size_type hdr_off_size = get_hdr_off_size(node_align);
|
|
1308
|
+
size_type initial_alignment = upper_power_of_2(hdr_size + PayloadPerAllocation + this->get_real_node_size());
|
|
1309
|
+
if (initial_alignment < node_align)
|
|
1310
|
+
initial_alignment = node_align;
|
|
1311
|
+
candidate_power_of_2_rt ( initial_alignment
|
|
1312
|
+
, this->get_real_node_size()
|
|
1200
1313
|
, PayloadPerAllocation
|
|
1201
1314
|
, nodes_per_block
|
|
1202
|
-
,
|
|
1203
|
-
,
|
|
1315
|
+
, hdr_size
|
|
1316
|
+
, hdr_off_size
|
|
1204
1317
|
, overhead_percent
|
|
1205
|
-
,
|
|
1206
|
-
,
|
|
1207
|
-
,
|
|
1318
|
+
, real_block_alignment
|
|
1319
|
+
, num_subblocks
|
|
1320
|
+
, real_num_node);
|
|
1321
|
+
this->data_t::set_real_block_alignment(real_block_alignment);
|
|
1322
|
+
this->data_t::set_num_subblocks(num_subblocks);
|
|
1323
|
+
this->data_t::set_real_num_node(real_num_node);
|
|
1208
1324
|
}
|
|
1209
1325
|
}
|
|
1210
1326
|
|
|
1211
1327
|
//!Destructor. Deallocates all allocated blocks. Never throws
|
|
1212
1328
|
~private_adaptive_node_pool_impl_rt()
|
|
1213
|
-
{ this->priv_clear(this->
|
|
1329
|
+
{ this->impl_t::priv_clear(this->get_num_subblocks(), this->get_real_block_alignment(), this->get_real_num_node()); }
|
|
1214
1330
|
|
|
1215
1331
|
size_type get_real_num_node() const
|
|
1216
|
-
{ return
|
|
1332
|
+
{ return data_t::get_real_num_node(); }
|
|
1217
1333
|
|
|
1218
1334
|
//!Allocates array of count elements. Can throw
|
|
1219
1335
|
void *allocate_node()
|
|
1220
1336
|
{
|
|
1221
|
-
return this->priv_allocate_node
|
|
1222
|
-
(
|
|
1337
|
+
return this->impl_t::priv_allocate_node
|
|
1338
|
+
( this->get_max_free_blocks(), this->get_real_block_alignment()
|
|
1339
|
+
, this->get_real_node_size(), this->get_real_num_node(), this->get_num_subblocks(), this->get_node_alignment());
|
|
1223
1340
|
}
|
|
1224
1341
|
|
|
1225
1342
|
//!Allocates n nodes.
|
|
@@ -1227,30 +1344,29 @@ class private_adaptive_node_pool_impl_rt
|
|
|
1227
1344
|
void allocate_nodes(const size_type n, multiallocation_chain &chain)
|
|
1228
1345
|
{
|
|
1229
1346
|
|
|
1230
|
-
this->priv_allocate_nodes
|
|
1231
|
-
(n, chain, this->
|
|
1347
|
+
this->impl_t::priv_allocate_nodes
|
|
1348
|
+
( n, chain, this->get_max_free_blocks(), this->get_real_block_alignment(), this->get_real_node_size()
|
|
1349
|
+
, this->get_real_num_node(), this->get_num_subblocks(), this->get_node_alignment());
|
|
1232
1350
|
}
|
|
1233
1351
|
|
|
1234
1352
|
//!Deallocates an array pointed by ptr. Never throws
|
|
1235
1353
|
void deallocate_node(void *pElem)
|
|
1236
1354
|
{
|
|
1237
|
-
this->priv_deallocate_node(pElem, this->
|
|
1355
|
+
this->impl_t::priv_deallocate_node( pElem, this->get_max_free_blocks(), this->get_real_num_node()
|
|
1356
|
+
, this->get_num_subblocks(), this->get_real_block_alignment(), this->get_node_alignment());
|
|
1238
1357
|
}
|
|
1239
1358
|
|
|
1240
1359
|
//!Deallocates a linked list of nodes. Never throws
|
|
1241
1360
|
void deallocate_nodes(multiallocation_chain &nodes)
|
|
1242
1361
|
{
|
|
1243
|
-
this->priv_deallocate_nodes(nodes, this->
|
|
1362
|
+
this->impl_t::priv_deallocate_nodes( nodes, this->get_max_free_blocks(), this->get_real_num_node()
|
|
1363
|
+
, this->get_num_subblocks(), this->get_real_block_alignment(), this->get_node_alignment());
|
|
1244
1364
|
}
|
|
1245
1365
|
|
|
1246
1366
|
void deallocate_free_blocks()
|
|
1247
|
-
{ this->priv_deallocate_free_blocks(0, this->
|
|
1248
|
-
|
|
1249
|
-
//Deprecated, use deallocate_free_blocks
|
|
1250
|
-
void deallocate_free_chunks()
|
|
1251
|
-
{ this->priv_deallocate_free_blocks(0, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); }
|
|
1367
|
+
{ this->impl_t::priv_deallocate_free_blocks( 0, this->get_real_num_node(), this->get_num_subblocks()
|
|
1368
|
+
, this->get_real_block_alignment()); }
|
|
1252
1369
|
};
|
|
1253
|
-
|
|
1254
1370
|
} //namespace dtl {
|
|
1255
1371
|
} //namespace container {
|
|
1256
1372
|
} //namespace boost {
|
|
@@ -194,7 +194,7 @@ InpIt find(InpIt first, InpIt last, const U& value)
|
|
|
194
194
|
template<class FwdIt, class U>
|
|
195
195
|
FwdIt remove(FwdIt first, FwdIt last, const U& value)
|
|
196
196
|
{
|
|
197
|
-
first = find(first, last, value);
|
|
197
|
+
first = (find)(first, last, value);
|
|
198
198
|
if (first != last)
|
|
199
199
|
for (FwdIt i = first; ++i != last;)
|
|
200
200
|
if (!(*i == value))
|
|
@@ -205,7 +205,7 @@ FwdIt remove(FwdIt first, FwdIt last, const U& value)
|
|
|
205
205
|
template<class FwdIt, class Pred>
|
|
206
206
|
FwdIt remove_if(FwdIt first, FwdIt last, Pred p)
|
|
207
207
|
{
|
|
208
|
-
first = find_if(first, last, p);
|
|
208
|
+
first = (find_if)(first, last, p);
|
|
209
209
|
if (first != last)
|
|
210
210
|
for (FwdIt i = first; ++i != last;)
|
|
211
211
|
if (!p(*i))
|