passenger 6.1.0 → 6.1.1
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 +32 -2
- data/Rakefile +6 -13
- data/bin/passenger-install-apache2-module +15 -19
- data/bin/passenger-install-nginx-module +42 -44
- data/bin/passenger-status +9 -10
- data/build/common_library.rb +4 -4
- data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
- data/build/test_basics.rb +4 -3
- data/dev/copy_boost_headers +54 -40
- data/dev/ruby_server.rb +1 -1
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +94 -110
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +52 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +641 -285
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +593 -260
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +37 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/chrono.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +16 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +25 -34
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +204 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +251 -122
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +56 -56
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +129 -129
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +253 -125
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +25 -25
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +193 -126
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +57 -57
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +96 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +27 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +21 -21
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +170 -98
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +209 -119
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +95 -95
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +148 -76
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +293 -123
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +87 -71
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +88 -88
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +110 -49
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/has_posix_clock_traits.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +69 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +51 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +31 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +90 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +80 -11
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +160 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +327 -38
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +276 -33
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +260 -20
- data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +14 -18
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/posix_clock_traits_fwd.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/wait_result.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +108 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +1235 -1009
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +23 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +88 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +72 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +37 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +72 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +3 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +54 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +27 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +37 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +41 -20
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -8
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_is_avalanching.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +29 -29
- data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/assert.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/static_assert.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -10
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +35 -27
- data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +20 -9
- data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +0 -5
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +43 -64
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/eval_if_default.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +103 -117
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/conjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/disjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/negation.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/type_identity.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +32 -38
- data/src/cxx_supportlib/vendor-modified/boost/iterator/enable_if_convertible.hpp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +162 -309
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +52 -161
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +3 -11
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +804 -977
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +24 -17
- data/src/cxx_supportlib/vendor-modified/boost/iterator/min_category.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/minimum_category.hpp +11 -73
- data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +56 -57
- data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +123 -156
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +43 -50
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +23 -27
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/type_traits.hpp +81 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +8 -9
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +1 -12
- data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +8 -26
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +11 -44
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +0 -13
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +190 -190
- data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +12 -2
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/size.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/xoshiro_base.hpp +472 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp +339 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +12 -14
- data/src/cxx_supportlib/vendor-modified/boost/random/inverse_gaussian_distribution.hpp +226 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +63 -63
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +8 -11
- data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/xoshiro.hpp +488 -0
- data/src/cxx_supportlib/vendor-modified/boost/random.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +35 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +18 -101
- data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +4 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +63 -17
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +71 -16
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +22 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +11 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +40 -38
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +46 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +57 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +21 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +12 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +16 -11
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +54 -49
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +64 -62
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +2 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -64
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_cxx20_constexpr.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +5 -28
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +41 -40
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +0 -18
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +34 -8
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/{unordered_printers.hpp → detail/unordered_printers.hpp} +34 -36
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +6 -49
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/nginx_module/ContentHandler.c +2 -0
- data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +5 -3
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +6 -13
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +29 -30
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -3
- data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +8 -8
- metadata +26 -99
- data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +0 -47
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +0 -41
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +0 -34
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -28
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +0 -68
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/detail/select_type.hpp +0 -36
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/internals.hpp +0 -35
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +0 -120
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_debug.cpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +0 -31
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/cwchar.hpp +0 -207
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +0 -182
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +0 -797
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +0 -1598
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +0 -3174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +0 -511
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/char_regex_traits.hpp +0 -81
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +0 -1237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -213
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/error_type.hpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +0 -1516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +0 -54
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_category.hpp +0 -91
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +0 -135
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +0 -161
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +0 -716
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +0 -183
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +0 -171
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +0 -645
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +0 -1030
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +0 -1947
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +0 -1131
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +0 -146
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regbase.hpp +0 -180
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -166
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -1158
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_fwd.hpp +0 -73
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +0 -155
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +0 -382
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_merge.hpp +0 -93
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +0 -241
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +0 -99
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +0 -217
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -327
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +0 -997
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +0 -237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +0 -321
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +0 -516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/syntax_type.hpp +0 -105
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +0 -360
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +0 -871
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +0 -1229
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +0 -96
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +0 -86
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +0 -94
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
4
4
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c) 2014
|
|
6
|
+
* Copyright (c) 2014-2025 Andrey Semashev
|
|
7
7
|
*/
|
|
8
8
|
/*!
|
|
9
9
|
* \file atomic/detail/core_operations_emulated.hpp
|
|
@@ -33,13 +33,13 @@ namespace detail {
|
|
|
33
33
|
template< std::size_t Size, std::size_t Alignment, bool = Alignment >= storage_traits< Size >::native_alignment >
|
|
34
34
|
struct core_operations_emulated_base
|
|
35
35
|
{
|
|
36
|
-
|
|
36
|
+
using storage_type = typename storage_traits< Size >::type;
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
template< std::size_t Size, std::size_t Alignment >
|
|
40
40
|
struct core_operations_emulated_base< Size, Alignment, false >
|
|
41
41
|
{
|
|
42
|
-
|
|
42
|
+
using storage_type = buffer_storage< Size, Alignment >;
|
|
43
43
|
};
|
|
44
44
|
|
|
45
45
|
//! Emulated implementation of core atomic operations
|
|
@@ -47,40 +47,40 @@ template< std::size_t Size, std::size_t Alignment, bool Signed, bool Interproces
|
|
|
47
47
|
struct core_operations_emulated :
|
|
48
48
|
public core_operations_emulated_base< Size, Alignment >
|
|
49
49
|
{
|
|
50
|
-
|
|
50
|
+
using base_type = core_operations_emulated_base< Size, Alignment >;
|
|
51
51
|
|
|
52
52
|
// Define storage_type to have alignment not greater than Alignment. This will allow operations to work with value_types
|
|
53
53
|
// that possibly have weaker alignment requirements than storage_traits< Size >::type would. This is important for atomic_ref<>.
|
|
54
54
|
// atomic<> will allow higher alignment requirement than its value_type.
|
|
55
55
|
// Note that storage_type should be an integral type, if possible, so that arithmetic and bitwise operations are possible.
|
|
56
|
-
|
|
56
|
+
using storage_type = typename base_type::storage_type;
|
|
57
57
|
|
|
58
|
-
static
|
|
59
|
-
static
|
|
58
|
+
static constexpr std::size_t storage_size = Size;
|
|
59
|
+
static constexpr std::size_t storage_alignment = Alignment >= storage_traits< Size >::alignment ? storage_traits< Size >::alignment : Alignment;
|
|
60
60
|
|
|
61
|
-
static
|
|
62
|
-
static
|
|
63
|
-
static
|
|
61
|
+
static constexpr bool is_signed = Signed;
|
|
62
|
+
static constexpr bool is_interprocess = Interprocess;
|
|
63
|
+
static constexpr bool full_cas_based = false;
|
|
64
64
|
|
|
65
|
-
static
|
|
65
|
+
static constexpr bool is_always_lock_free = false;
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
using scoped_lock = lock_pool::scoped_lock< storage_alignment >;
|
|
68
68
|
|
|
69
|
-
static void store(storage_type volatile& storage, storage_type v, memory_order)
|
|
69
|
+
static void store(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
70
70
|
{
|
|
71
71
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
72
72
|
scoped_lock lock(&storage);
|
|
73
73
|
const_cast< storage_type& >(storage) = v;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
static storage_type load(storage_type const volatile& storage, memory_order)
|
|
76
|
+
static storage_type load(storage_type const volatile& storage, memory_order) noexcept
|
|
77
77
|
{
|
|
78
78
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
79
79
|
scoped_lock lock(&storage);
|
|
80
80
|
return const_cast< storage_type const& >(storage);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
static storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order)
|
|
83
|
+
static storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
84
84
|
{
|
|
85
85
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
86
86
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -90,7 +90,7 @@ struct core_operations_emulated :
|
|
|
90
90
|
return old_val;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
static storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order)
|
|
93
|
+
static storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
94
94
|
{
|
|
95
95
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
96
96
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -100,7 +100,7 @@ struct core_operations_emulated :
|
|
|
100
100
|
return old_val;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
static storage_type exchange(storage_type volatile& storage, storage_type v, memory_order)
|
|
103
|
+
static storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
104
104
|
{
|
|
105
105
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
106
106
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -111,7 +111,7 @@ struct core_operations_emulated :
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
static bool compare_exchange_strong(
|
|
114
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order)
|
|
114
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) noexcept
|
|
115
115
|
{
|
|
116
116
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
117
117
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -126,7 +126,7 @@ struct core_operations_emulated :
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
static bool compare_exchange_weak(
|
|
129
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order)
|
|
129
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) noexcept
|
|
130
130
|
{
|
|
131
131
|
// Note: This function is the exact copy of compare_exchange_strong. The reason we're not just forwarding the call
|
|
132
132
|
// is that MSVC-12 ICEs in this case.
|
|
@@ -142,7 +142,7 @@ struct core_operations_emulated :
|
|
|
142
142
|
return res;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
static storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
145
|
+
static storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
146
146
|
{
|
|
147
147
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
148
148
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -152,7 +152,7 @@ struct core_operations_emulated :
|
|
|
152
152
|
return old_val;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
static storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
155
|
+
static storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
156
156
|
{
|
|
157
157
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
158
158
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -162,7 +162,7 @@ struct core_operations_emulated :
|
|
|
162
162
|
return old_val;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
static storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
165
|
+
static storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
166
166
|
{
|
|
167
167
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
168
168
|
storage_type& s = const_cast< storage_type& >(storage);
|
|
@@ -172,13 +172,13 @@ struct core_operations_emulated :
|
|
|
172
172
|
return old_val;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order)
|
|
175
|
+
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) noexcept
|
|
176
176
|
{
|
|
177
177
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
178
178
|
return !!exchange(storage, (storage_type)1, order);
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order)
|
|
181
|
+
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) noexcept
|
|
182
182
|
{
|
|
183
183
|
static_assert(!is_interprocess, "Boost.Atomic: operation invoked on a non-lock-free inter-process atomic object");
|
|
184
184
|
store(storage, (storage_type)0, order);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
4
4
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c) 2014 Andrey Semashev
|
|
6
|
+
* Copyright (c) 2014-2025 Andrey Semashev
|
|
7
7
|
*/
|
|
8
8
|
/*!
|
|
9
9
|
* \file atomic/detail/core_ops_cas_based.hpp
|
|
@@ -30,11 +30,11 @@ template< typename Base >
|
|
|
30
30
|
struct core_operations_cas_based :
|
|
31
31
|
public Base
|
|
32
32
|
{
|
|
33
|
-
|
|
33
|
+
using storage_type = typename Base::storage_type;
|
|
34
34
|
|
|
35
|
-
static
|
|
35
|
+
static constexpr bool full_cas_based = true;
|
|
36
36
|
|
|
37
|
-
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order)
|
|
37
|
+
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
38
38
|
{
|
|
39
39
|
storage_type old_val;
|
|
40
40
|
atomics::detail::non_atomic_load(storage, old_val);
|
|
@@ -42,7 +42,7 @@ struct core_operations_cas_based :
|
|
|
42
42
|
return old_val;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order)
|
|
45
|
+
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
46
46
|
{
|
|
47
47
|
storage_type old_val;
|
|
48
48
|
atomics::detail::non_atomic_load(storage, old_val);
|
|
@@ -50,7 +50,7 @@ struct core_operations_cas_based :
|
|
|
50
50
|
return old_val;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order)
|
|
53
|
+
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
54
54
|
{
|
|
55
55
|
storage_type old_val;
|
|
56
56
|
atomics::detail::non_atomic_load(storage, old_val);
|
|
@@ -58,7 +58,7 @@ struct core_operations_cas_based :
|
|
|
58
58
|
return old_val;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order)
|
|
61
|
+
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
62
62
|
{
|
|
63
63
|
storage_type old_val;
|
|
64
64
|
atomics::detail::non_atomic_load(storage, old_val);
|
|
@@ -66,7 +66,7 @@ struct core_operations_cas_based :
|
|
|
66
66
|
return old_val;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order)
|
|
69
|
+
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
70
70
|
{
|
|
71
71
|
storage_type old_val;
|
|
72
72
|
atomics::detail::non_atomic_load(storage, old_val);
|
|
@@ -74,12 +74,12 @@ struct core_operations_cas_based :
|
|
|
74
74
|
return old_val;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order)
|
|
77
|
+
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) noexcept
|
|
78
78
|
{
|
|
79
79
|
return !!Base::exchange(storage, (storage_type)1, order);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order)
|
|
82
|
+
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) noexcept
|
|
83
83
|
{
|
|
84
84
|
Base::store(storage, (storage_type)0, order);
|
|
85
85
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
4
4
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c) 2014
|
|
6
|
+
* Copyright (c) 2014-2025 Andrey Semashev
|
|
7
7
|
*/
|
|
8
8
|
/*!
|
|
9
9
|
* \file atomic/detail/core_ops_gcc_atomic.hpp
|
|
@@ -23,8 +23,10 @@
|
|
|
23
23
|
#include <boost/atomic/detail/capabilities.hpp>
|
|
24
24
|
#include <boost/atomic/detail/gcc_atomic_memory_order_utils.hpp>
|
|
25
25
|
|
|
26
|
-
#if BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT8_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE ||
|
|
27
|
-
|
|
26
|
+
#if BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT8_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE || \
|
|
27
|
+
BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE || \
|
|
28
|
+
BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE || \
|
|
29
|
+
BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE
|
|
28
30
|
// There are platforms where we need to use larger storage types
|
|
29
31
|
#include <boost/atomic/detail/int_sizes.hpp>
|
|
30
32
|
#include <boost/atomic/detail/extending_cas_based_arithmetic.hpp>
|
|
@@ -51,20 +53,20 @@ namespace detail {
|
|
|
51
53
|
template< std::size_t Size, bool Signed, bool Interprocess >
|
|
52
54
|
struct core_operations_gcc_atomic
|
|
53
55
|
{
|
|
54
|
-
|
|
56
|
+
using storage_type = typename storage_traits< Size >::type;
|
|
55
57
|
|
|
56
|
-
static
|
|
57
|
-
static
|
|
58
|
-
static
|
|
59
|
-
static
|
|
60
|
-
static
|
|
58
|
+
static constexpr std::size_t storage_size = Size;
|
|
59
|
+
static constexpr std::size_t storage_alignment = storage_traits< Size >::alignment;
|
|
60
|
+
static constexpr bool is_signed = Signed;
|
|
61
|
+
static constexpr bool is_interprocess = Interprocess;
|
|
62
|
+
static constexpr bool full_cas_based = false;
|
|
61
63
|
|
|
62
64
|
// Note: In the current implementation, core_operations_gcc_atomic are used only when the particularly sized __atomic
|
|
63
65
|
// intrinsics are always lock-free (i.e. the corresponding LOCK_FREE macro is 2). Therefore it is safe to
|
|
64
66
|
// always set is_always_lock_free to true here.
|
|
65
|
-
static
|
|
67
|
+
static constexpr bool is_always_lock_free = true;
|
|
66
68
|
|
|
67
|
-
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order)
|
|
69
|
+
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
68
70
|
{
|
|
69
71
|
#if defined(BOOST_GCC) && BOOST_GCC < 100100 && (defined(__x86_64__) || defined(__i386__))
|
|
70
72
|
// gcc up to 10.1 generates mov + mfence for seq_cst stores, which is slower than xchg
|
|
@@ -77,35 +79,36 @@ struct core_operations_gcc_atomic
|
|
|
77
79
|
#endif
|
|
78
80
|
}
|
|
79
81
|
|
|
80
|
-
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order)
|
|
82
|
+
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) noexcept
|
|
81
83
|
{
|
|
82
|
-
#if defined(BOOST_ATOMIC_DETAIL_AARCH64_HAS_RCPC)
|
|
84
|
+
#if defined(BOOST_ATOMIC_DETAIL_AARCH64_HAS_RCPC) && !((defined(BOOST_GCC) && BOOST_GCC >= 130100) || (defined(BOOST_CLANG) && BOOST_CLANG_VERSION >= 160000))
|
|
83
85
|
// At least gcc 9.3 and clang 10 do not generate relaxed ldapr instructions that are available in ARMv8.3-RCPC extension.
|
|
84
86
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95751
|
|
85
|
-
|
|
87
|
+
// This was fixed in gcc 13.1 and clang 16.
|
|
88
|
+
using core_arch_operations = atomics::detail::core_arch_operations< storage_size, is_signed, is_interprocess >;
|
|
86
89
|
return core_arch_operations::load(storage, order);
|
|
87
90
|
#else
|
|
88
91
|
return __atomic_load_n(&storage, atomics::detail::convert_memory_order_to_gcc(order));
|
|
89
92
|
#endif
|
|
90
93
|
}
|
|
91
94
|
|
|
92
|
-
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order)
|
|
95
|
+
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
93
96
|
{
|
|
94
97
|
return __atomic_fetch_add(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
|
|
95
98
|
}
|
|
96
99
|
|
|
97
|
-
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order)
|
|
100
|
+
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
98
101
|
{
|
|
99
102
|
return __atomic_fetch_sub(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
|
|
100
103
|
}
|
|
101
104
|
|
|
102
|
-
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order)
|
|
105
|
+
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
103
106
|
{
|
|
104
107
|
return __atomic_exchange_n(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
|
|
105
108
|
}
|
|
106
109
|
|
|
107
110
|
static BOOST_FORCEINLINE bool compare_exchange_strong(
|
|
108
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order)
|
|
111
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
|
|
109
112
|
{
|
|
110
113
|
return __atomic_compare_exchange_n
|
|
111
114
|
(
|
|
@@ -116,7 +119,7 @@ struct core_operations_gcc_atomic
|
|
|
116
119
|
}
|
|
117
120
|
|
|
118
121
|
static BOOST_FORCEINLINE bool compare_exchange_weak(
|
|
119
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order)
|
|
122
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
|
|
120
123
|
{
|
|
121
124
|
return __atomic_compare_exchange_n
|
|
122
125
|
(
|
|
@@ -126,27 +129,27 @@ struct core_operations_gcc_atomic
|
|
|
126
129
|
);
|
|
127
130
|
}
|
|
128
131
|
|
|
129
|
-
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order)
|
|
132
|
+
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
130
133
|
{
|
|
131
134
|
return __atomic_fetch_and(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
|
|
132
135
|
}
|
|
133
136
|
|
|
134
|
-
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order)
|
|
137
|
+
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
135
138
|
{
|
|
136
139
|
return __atomic_fetch_or(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
|
|
137
140
|
}
|
|
138
141
|
|
|
139
|
-
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order)
|
|
142
|
+
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
140
143
|
{
|
|
141
144
|
return __atomic_fetch_xor(&storage, v, atomics::detail::convert_memory_order_to_gcc(order));
|
|
142
145
|
}
|
|
143
146
|
|
|
144
|
-
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order)
|
|
147
|
+
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) noexcept
|
|
145
148
|
{
|
|
146
149
|
return __atomic_test_and_set(&storage, atomics::detail::convert_memory_order_to_gcc(order));
|
|
147
150
|
}
|
|
148
151
|
|
|
149
|
-
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order)
|
|
152
|
+
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) noexcept
|
|
150
153
|
{
|
|
151
154
|
__atomic_clear(const_cast< storage_type* >(&storage), atomics::detail::convert_memory_order_to_gcc(order));
|
|
152
155
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) 2011 Helge Bahmann
|
|
7
7
|
* Copyright (c) 2013 Tim Blechmann
|
|
8
|
-
* Copyright (c) 2014 Andrey Semashev
|
|
8
|
+
* Copyright (c) 2014-2025 Andrey Semashev
|
|
9
9
|
*/
|
|
10
10
|
/*!
|
|
11
11
|
* \file atomic/detail/core_ops_gcc_sync.hpp
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
#define BOOST_ATOMIC_DETAIL_CORE_OPS_GCC_SYNC_HPP_INCLUDED_
|
|
18
18
|
|
|
19
19
|
#include <cstddef>
|
|
20
|
+
#include <type_traits>
|
|
20
21
|
#include <boost/memory_order.hpp>
|
|
21
22
|
#include <boost/atomic/detail/config.hpp>
|
|
22
23
|
#include <boost/atomic/detail/storage_traits.hpp>
|
|
23
24
|
#include <boost/atomic/detail/core_operations_fwd.hpp>
|
|
24
25
|
#include <boost/atomic/detail/extending_cas_based_arithmetic.hpp>
|
|
25
|
-
#include <boost/atomic/detail/type_traits/integral_constant.hpp>
|
|
26
26
|
#include <boost/atomic/detail/capabilities.hpp>
|
|
27
27
|
#include <boost/atomic/detail/header.hpp>
|
|
28
28
|
|
|
@@ -36,22 +36,22 @@ namespace detail {
|
|
|
36
36
|
|
|
37
37
|
struct core_operations_gcc_sync_base
|
|
38
38
|
{
|
|
39
|
-
static
|
|
40
|
-
static
|
|
39
|
+
static constexpr bool full_cas_based = false;
|
|
40
|
+
static constexpr bool is_always_lock_free = true;
|
|
41
41
|
|
|
42
|
-
static BOOST_FORCEINLINE void fence_before_store(memory_order order)
|
|
42
|
+
static BOOST_FORCEINLINE void fence_before_store(memory_order order) noexcept
|
|
43
43
|
{
|
|
44
44
|
if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u)
|
|
45
45
|
__sync_synchronize();
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
static BOOST_FORCEINLINE void fence_after_store(memory_order order)
|
|
48
|
+
static BOOST_FORCEINLINE void fence_after_store(memory_order order) noexcept
|
|
49
49
|
{
|
|
50
50
|
if (order == memory_order_seq_cst)
|
|
51
51
|
__sync_synchronize();
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
static BOOST_FORCEINLINE void fence_after_load(memory_order order)
|
|
54
|
+
static BOOST_FORCEINLINE void fence_after_load(memory_order order) noexcept
|
|
55
55
|
{
|
|
56
56
|
if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_acquire) | static_cast< unsigned int >(memory_order_consume))) != 0u)
|
|
57
57
|
__sync_synchronize();
|
|
@@ -62,49 +62,40 @@ template< std::size_t Size, bool Signed, bool Interprocess >
|
|
|
62
62
|
struct core_operations_gcc_sync :
|
|
63
63
|
public core_operations_gcc_sync_base
|
|
64
64
|
{
|
|
65
|
-
|
|
65
|
+
using storage_type = typename storage_traits< Size >::type;
|
|
66
66
|
|
|
67
|
-
static
|
|
68
|
-
static
|
|
69
|
-
static
|
|
70
|
-
static
|
|
67
|
+
static constexpr std::size_t storage_size = Size;
|
|
68
|
+
static constexpr std::size_t storage_alignment = storage_traits< storage_size >::alignment;
|
|
69
|
+
static constexpr bool is_signed = Signed;
|
|
70
|
+
static constexpr bool is_interprocess = Interprocess;
|
|
71
71
|
|
|
72
|
+
private:
|
|
72
73
|
// In general, we cannot guarantee atomicity of plain loads and stores of anything larger than a single byte on
|
|
73
74
|
// an arbitrary CPU architecture. However, all modern architectures seem to guarantee atomic loads and stores of
|
|
74
75
|
// suitably aligned objects of up to a pointer size. For larger objects we should probably use intrinsics to guarantee
|
|
75
76
|
// atomicity. If there appears an architecture where this doesn't hold, this threshold needs to be updated (patches are welcome).
|
|
76
|
-
|
|
77
|
+
using plain_stores_loads_are_atomic = std::integral_constant< bool, storage_size <= sizeof(void*) >;
|
|
77
78
|
|
|
78
|
-
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order)
|
|
79
|
-
{
|
|
80
|
-
store(storage, v, order, plain_stores_loads_are_atomic());
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order, atomics::detail::true_type) BOOST_NOEXCEPT
|
|
79
|
+
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order, std::true_type) noexcept
|
|
84
80
|
{
|
|
85
81
|
fence_before_store(order);
|
|
86
82
|
storage = v;
|
|
87
83
|
fence_after_store(order);
|
|
88
84
|
}
|
|
89
85
|
|
|
90
|
-
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order,
|
|
86
|
+
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order, std::false_type) noexcept
|
|
91
87
|
{
|
|
92
88
|
exchange(storage, v, order);
|
|
93
89
|
}
|
|
94
90
|
|
|
95
|
-
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order)
|
|
96
|
-
{
|
|
97
|
-
return load(storage, order, plain_stores_loads_are_atomic());
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order, atomics::detail::true_type) BOOST_NOEXCEPT
|
|
91
|
+
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order, std::true_type) noexcept
|
|
101
92
|
{
|
|
102
93
|
storage_type v = storage;
|
|
103
94
|
fence_after_load(order);
|
|
104
95
|
return v;
|
|
105
96
|
}
|
|
106
97
|
|
|
107
|
-
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order,
|
|
98
|
+
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order, std::false_type) noexcept
|
|
108
99
|
{
|
|
109
100
|
// Note: don't use fetch_add or other arithmetics here since storage_type may not be an arithmetic type.
|
|
110
101
|
storage_type expected = storage_type();
|
|
@@ -113,17 +104,28 @@ struct core_operations_gcc_sync :
|
|
|
113
104
|
return __sync_val_compare_and_swap(const_cast< storage_type volatile* >(&storage), expected, desired);
|
|
114
105
|
}
|
|
115
106
|
|
|
116
|
-
|
|
107
|
+
public:
|
|
108
|
+
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
109
|
+
{
|
|
110
|
+
store(storage, v, order, plain_stores_loads_are_atomic());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) noexcept
|
|
114
|
+
{
|
|
115
|
+
return load(storage, order, plain_stores_loads_are_atomic());
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
117
119
|
{
|
|
118
120
|
return __sync_fetch_and_add(&storage, v);
|
|
119
121
|
}
|
|
120
122
|
|
|
121
|
-
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order)
|
|
123
|
+
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
122
124
|
{
|
|
123
125
|
return __sync_fetch_and_sub(&storage, v);
|
|
124
126
|
}
|
|
125
127
|
|
|
126
|
-
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order)
|
|
128
|
+
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
127
129
|
{
|
|
128
130
|
// GCC docs mention that not all architectures may support full exchange semantics for this intrinsic. However, GCC's implementation of
|
|
129
131
|
// std::atomic<> uses this intrinsic unconditionally. We do so as well. In case if some architectures actually don't support this, we can always
|
|
@@ -134,7 +136,7 @@ struct core_operations_gcc_sync :
|
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
static BOOST_FORCEINLINE bool compare_exchange_strong(
|
|
137
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order)
|
|
139
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) noexcept
|
|
138
140
|
{
|
|
139
141
|
storage_type expected2 = expected;
|
|
140
142
|
storage_type old_val = __sync_val_compare_and_swap(&storage, expected2, desired);
|
|
@@ -151,34 +153,34 @@ struct core_operations_gcc_sync :
|
|
|
151
153
|
}
|
|
152
154
|
|
|
153
155
|
static BOOST_FORCEINLINE bool compare_exchange_weak(
|
|
154
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order)
|
|
156
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
|
|
155
157
|
{
|
|
156
158
|
return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
|
|
157
159
|
}
|
|
158
160
|
|
|
159
|
-
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
161
|
+
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
160
162
|
{
|
|
161
163
|
return __sync_fetch_and_and(&storage, v);
|
|
162
164
|
}
|
|
163
165
|
|
|
164
|
-
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
166
|
+
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
165
167
|
{
|
|
166
168
|
return __sync_fetch_and_or(&storage, v);
|
|
167
169
|
}
|
|
168
170
|
|
|
169
|
-
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
171
|
+
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) noexcept
|
|
170
172
|
{
|
|
171
173
|
return __sync_fetch_and_xor(&storage, v);
|
|
172
174
|
}
|
|
173
175
|
|
|
174
|
-
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order)
|
|
176
|
+
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) noexcept
|
|
175
177
|
{
|
|
176
178
|
if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u)
|
|
177
179
|
__sync_synchronize();
|
|
178
180
|
return !!__sync_lock_test_and_set(&storage, 1);
|
|
179
181
|
}
|
|
180
182
|
|
|
181
|
-
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order)
|
|
183
|
+
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) noexcept
|
|
182
184
|
{
|
|
183
185
|
__sync_lock_release(&storage);
|
|
184
186
|
if (order == memory_order_seq_cst)
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Copyright (c) 2009 Phil Endecott
|
|
8
8
|
* Copyright (c) 2013 Tim Blechmann
|
|
9
9
|
* Linux-specific code by Phil Endecott
|
|
10
|
-
* Copyright (c) 2014 Andrey Semashev
|
|
10
|
+
* Copyright (c) 2014-2025 Andrey Semashev
|
|
11
11
|
*/
|
|
12
12
|
/*!
|
|
13
13
|
* \file atomic/detail/core_ops_linux_arm.hpp
|
|
@@ -62,22 +62,22 @@ namespace detail {
|
|
|
62
62
|
|
|
63
63
|
struct linux_arm_cas_base
|
|
64
64
|
{
|
|
65
|
-
static
|
|
66
|
-
static
|
|
65
|
+
static constexpr bool full_cas_based = true;
|
|
66
|
+
static constexpr bool is_always_lock_free = true;
|
|
67
67
|
|
|
68
|
-
static BOOST_FORCEINLINE void fence_before_store(memory_order order)
|
|
68
|
+
static BOOST_FORCEINLINE void fence_before_store(memory_order order) noexcept
|
|
69
69
|
{
|
|
70
70
|
if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u)
|
|
71
71
|
fence_operations::hardware_full_fence();
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
static BOOST_FORCEINLINE void fence_after_store(memory_order order)
|
|
74
|
+
static BOOST_FORCEINLINE void fence_after_store(memory_order order) noexcept
|
|
75
75
|
{
|
|
76
76
|
if (order == memory_order_seq_cst)
|
|
77
77
|
fence_operations::hardware_full_fence();
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
static BOOST_FORCEINLINE void fence_after_load(memory_order order)
|
|
80
|
+
static BOOST_FORCEINLINE void fence_after_load(memory_order order) noexcept
|
|
81
81
|
{
|
|
82
82
|
if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u)
|
|
83
83
|
fence_operations::hardware_full_fence();
|
|
@@ -88,21 +88,21 @@ template< bool Signed, bool Interprocess >
|
|
|
88
88
|
struct linux_arm_cas :
|
|
89
89
|
public linux_arm_cas_base
|
|
90
90
|
{
|
|
91
|
-
|
|
91
|
+
using storage_type = typename storage_traits< 4u >::type;
|
|
92
92
|
|
|
93
|
-
static
|
|
94
|
-
static
|
|
95
|
-
static
|
|
96
|
-
static
|
|
93
|
+
static constexpr std::size_t storage_size = 4u;
|
|
94
|
+
static constexpr std::size_t storage_alignment = 4u;
|
|
95
|
+
static constexpr bool is_signed = Signed;
|
|
96
|
+
static constexpr bool is_interprocess = Interprocess;
|
|
97
97
|
|
|
98
|
-
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order)
|
|
98
|
+
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
99
99
|
{
|
|
100
100
|
fence_before_store(order);
|
|
101
101
|
storage = v;
|
|
102
102
|
fence_after_store(order);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order)
|
|
105
|
+
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) noexcept
|
|
106
106
|
{
|
|
107
107
|
storage_type v = storage;
|
|
108
108
|
fence_after_load(order);
|
|
@@ -110,7 +110,7 @@ struct linux_arm_cas :
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
static BOOST_FORCEINLINE bool compare_exchange_strong(
|
|
113
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order)
|
|
113
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
|
|
114
114
|
{
|
|
115
115
|
while (true)
|
|
116
116
|
{
|
|
@@ -126,11 +126,11 @@ struct linux_arm_cas :
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
static BOOST_FORCEINLINE bool compare_exchange_weak(
|
|
129
|
-
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order)
|
|
129
|
+
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) noexcept
|
|
130
130
|
{
|
|
131
|
-
|
|
131
|
+
using kernel_cmpxchg32_t = storage_type (storage_type oldval, storage_type newval, volatile storage_type* ptr);
|
|
132
132
|
|
|
133
|
-
if (((kernel_cmpxchg32_t)0xffff0fc0)(expected, desired, &storage) == 0)
|
|
133
|
+
if (((kernel_cmpxchg32_t*)0xffff0fc0)(expected, desired, &storage) == 0)
|
|
134
134
|
{
|
|
135
135
|
return true;
|
|
136
136
|
}
|