passenger 4.0.20 → 4.0.21
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/NEWS +15 -0
- data/README.md +5 -3
- data/Rakefile +1 -0
- data/bin/passenger-config +1 -5
- data/bin/passenger-install-apache2-module +53 -5
- data/bin/passenger-install-nginx-module +19 -6
- data/bin/passenger-memory-stats +3 -3
- data/build/agents.rb +11 -8
- data/build/apache2.rb +9 -5
- data/build/basics.rb +15 -21
- data/build/common_library.rb +16 -6
- data/build/cplusplus_support.rb +5 -5
- data/build/cxx_tests.rb +3 -3
- data/build/documentation.rb +1 -1
- data/build/misc.rb +4 -37
- data/build/node_tests.rb +29 -0
- data/build/oxt_tests.rb +1 -1
- data/build/packaging.rb +29 -10
- data/build/preprocessor.rb +2 -1
- data/build/test_basics.rb +15 -6
- data/debian.template/locations.ini.template +1 -0
- data/debian.template/passenger.install.template +1 -0
- data/dev/copy_boost_headers.rb +7 -3
- data/dev/run_travis.sh +32 -16
- data/doc/Users guide Apache.idmap.txt +22 -34
- data/doc/Users guide Apache.txt +20 -234
- data/doc/Users guide Nginx.idmap.txt +84 -66
- data/doc/Users guide Nginx.txt +50 -1
- data/doc/Users guide Standalone.idmap.txt +74 -0
- data/doc/Users guide Standalone.txt +22 -9
- data/doc/Users guide.txt +51 -0
- data/doc/users_guide_snippets/environment_variables.txt +0 -3
- data/doc/users_guide_snippets/installation.txt +337 -380
- data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
- data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
- data/doc/users_guide_snippets/support_information.txt +2 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
- data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
- data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
- data/ext/apache2/Bucket.h +1 -1
- data/ext/apache2/Configuration.hpp +0 -44
- data/ext/apache2/CreateDirConfig.cpp +1 -1
- data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
- data/ext/apache2/Hooks.cpp +28 -21
- data/ext/apache2/MergeDirConfig.cpp +1 -0
- data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
- data/ext/apache2/SetHeaders.cpp +73 -0
- data/ext/apache2/SetHeaders.cpp.erb +88 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
- data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
- data/ext/boost/algorithm/string/formatter.hpp +2 -2
- data/ext/boost/assert.hpp +6 -1
- data/ext/boost/atomic.hpp +18 -0
- data/ext/boost/atomic/atomic.hpp +241 -0
- data/ext/boost/atomic/detail/base.hpp +585 -0
- data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
- data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
- data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
- data/ext/boost/atomic/detail/config.hpp +54 -0
- data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
- data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
- data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
- data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
- data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
- data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
- data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
- data/ext/boost/atomic/detail/interlocked.hpp +200 -0
- data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
- data/ext/boost/atomic/detail/lockpool.hpp +97 -0
- data/ext/boost/atomic/detail/platform.hpp +62 -0
- data/ext/boost/atomic/detail/type-classification.hpp +45 -0
- data/ext/boost/chrono/config.hpp +8 -3
- data/ext/boost/chrono/duration.hpp +9 -10
- data/ext/boost/chrono/system_clocks.hpp +1 -1
- data/ext/boost/chrono/time_point.hpp +4 -3
- data/ext/boost/config/auto_link.hpp +53 -52
- data/ext/boost/config/compiler/borland.hpp +1 -0
- data/ext/boost/config/compiler/clang.hpp +24 -1
- data/ext/boost/config/compiler/codegear.hpp +1 -0
- data/ext/boost/config/compiler/common_edg.hpp +1 -0
- data/ext/boost/config/compiler/cray.hpp +1 -0
- data/ext/boost/config/compiler/digitalmars.hpp +1 -0
- data/ext/boost/config/compiler/gcc.hpp +29 -3
- data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
- data/ext/boost/config/compiler/hp_acc.hpp +1 -0
- data/ext/boost/config/compiler/intel.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -0
- data/ext/boost/config/compiler/mpw.hpp +1 -0
- data/ext/boost/config/compiler/pathscale.hpp +1 -0
- data/ext/boost/config/compiler/pgi.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
- data/ext/boost/config/compiler/vacpp.hpp +3 -2
- data/ext/boost/config/compiler/visualc.hpp +25 -11
- data/ext/boost/config/platform/vxworks.hpp +353 -15
- data/ext/boost/config/select_compiler_config.hpp +4 -4
- data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
- data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
- data/ext/boost/config/suffix.hpp +45 -19
- data/ext/boost/date_time/format_date_parser.hpp +1 -11
- data/ext/boost/date_time/strings_from_facet.hpp +5 -3
- data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
- data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
- data/ext/boost/detail/endian.hpp +52 -4
- data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
- data/ext/boost/detail/select_type.hpp +36 -0
- data/ext/boost/exception/current_exception_cast.hpp +1 -1
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
- data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
- data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/ext/boost/exception/detail/type_info.hpp +1 -1
- data/ext/boost/exception/diagnostic_information.hpp +15 -14
- data/ext/boost/exception/exception.hpp +1 -1
- data/ext/boost/exception/get_error_info.hpp +1 -1
- data/ext/boost/exception/info.hpp +12 -13
- data/ext/boost/exception/to_string.hpp +6 -1
- data/ext/boost/exception/to_string_stub.hpp +9 -1
- data/ext/boost/foreach.hpp +5 -5
- data/ext/boost/function/function_template.hpp +6 -6
- data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
- data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
- data/ext/boost/functional/hash/extensions.hpp +14 -2
- data/ext/boost/functional/hash/hash.hpp +26 -5
- data/ext/boost/get_pointer.hpp +17 -2
- data/ext/boost/integer_traits.hpp +1 -1
- data/ext/boost/lexical_cast.hpp +615 -395
- data/ext/boost/libs/atomic/lockpool.cpp +24 -0
- data/ext/boost/libs/system/src/error_code.cpp +25 -18
- data/ext/boost/libs/thread/src/future.cpp +7 -5
- data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
- data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
- data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/math/policies/policy.hpp +10 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
- data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
- data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
- data/ext/boost/math/special_functions/sign.hpp +13 -8
- data/ext/boost/math/tools/config.hpp +38 -16
- data/ext/boost/move/algorithm.hpp +275 -0
- data/ext/boost/move/core.hpp +332 -0
- data/ext/boost/move/detail/config_begin.hpp +23 -0
- data/ext/boost/move/detail/config_end.hpp +20 -0
- data/ext/boost/move/detail/meta_utils.hpp +158 -0
- data/ext/boost/move/iterator.hpp +298 -0
- data/ext/boost/move/move.hpp +10 -1256
- data/ext/boost/move/traits.hpp +142 -0
- data/ext/boost/move/utility.hpp +194 -0
- data/ext/boost/mpl/assert.hpp +72 -4
- data/ext/boost/noncopyable.hpp +15 -3
- data/ext/boost/pointer_to_other.hpp +55 -0
- data/ext/boost/range/concepts.hpp +4 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
- data/ext/boost/range/empty.hpp +1 -1
- data/ext/boost/range/iterator_range_core.hpp +4 -1
- data/ext/boost/range/iterator_range_io.hpp +2 -2
- data/ext/boost/ratio/config.hpp +6 -0
- data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
- data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
- data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
- data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
- data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
- data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
- data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
- data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
- data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
- data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
- data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
- data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
- data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
- data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
- data/ext/boost/smart_ptr/shared_array.hpp +135 -20
- data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
- data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
- data/ext/boost/static_assert.hpp +74 -17
- data/ext/boost/system/error_code.hpp +76 -68
- data/ext/boost/system/system_error.hpp +5 -1
- data/ext/boost/thread/barrier.hpp +6 -2
- data/ext/boost/thread/completion_latch.hpp +233 -0
- data/ext/boost/thread/condition.hpp +6 -1
- data/ext/boost/thread/detail/async_func.hpp +571 -0
- data/ext/boost/thread/detail/config.hpp +248 -40
- data/ext/boost/thread/detail/counter.hpp +93 -0
- data/ext/boost/thread/detail/delete.hpp +12 -0
- data/ext/boost/thread/detail/invoke.hpp +1351 -0
- data/ext/boost/thread/detail/is_convertible.hpp +48 -0
- data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
- data/ext/boost/thread/detail/log.hpp +83 -0
- data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
- data/ext/boost/thread/detail/move.hpp +32 -16
- data/ext/boost/thread/detail/thread.hpp +236 -41
- data/ext/boost/thread/detail/thread_group.hpp +55 -9
- data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
- data/ext/boost/thread/exceptions.hpp +2 -0
- data/ext/boost/thread/externally_locked.hpp +351 -0
- data/ext/boost/thread/externally_locked_stream.hpp +170 -0
- data/ext/boost/thread/future.hpp +2517 -455
- data/ext/boost/thread/future_error_code.hpp +61 -0
- data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
- data/ext/boost/thread/latch.hpp +142 -0
- data/ext/boost/thread/lock_algorithms.hpp +468 -0
- data/ext/boost/thread/lock_concepts.hpp +197 -0
- data/ext/boost/thread/lock_factories.hpp +78 -0
- data/ext/boost/thread/lock_guard.hpp +88 -0
- data/ext/boost/thread/lock_options.hpp +31 -0
- data/ext/boost/thread/lock_traits.hpp +45 -0
- data/ext/boost/thread/lock_types.hpp +1226 -0
- data/ext/boost/thread/lockable_adapter.hpp +226 -0
- data/ext/boost/thread/lockable_concepts.hpp +157 -0
- data/ext/boost/thread/lockable_traits.hpp +207 -0
- data/ext/boost/thread/locks.hpp +5 -1816
- data/ext/boost/thread/mutex.hpp +33 -1
- data/ext/boost/thread/null_mutex.hpp +243 -0
- data/ext/boost/thread/once.hpp +10 -1
- data/ext/boost/thread/poly_lockable.hpp +68 -0
- data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
- data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
- data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
- data/ext/boost/thread/pthread/mutex.hpp +101 -38
- data/ext/boost/thread/pthread/once.hpp +459 -44
- data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
- data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
- data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
- data/ext/boost/thread/pthread/thread_data.hpp +53 -50
- data/ext/boost/thread/pthread/timespec.hpp +96 -12
- data/ext/boost/thread/recursive_mutex.hpp +44 -1
- data/ext/boost/thread/reverse_lock.hpp +3 -2
- data/ext/boost/thread/scoped_thread.hpp +285 -0
- data/ext/boost/thread/shared_lock_guard.hpp +2 -1
- data/ext/boost/thread/shared_mutex.hpp +23 -0
- data/ext/boost/thread/strict_lock.hpp +235 -0
- data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
- data/ext/boost/thread/sync_queue.hpp +516 -0
- data/ext/boost/thread/synchronized_value.hpp +1001 -0
- data/ext/boost/thread/testable_mutex.hpp +148 -0
- data/ext/boost/thread/thread.hpp +1 -13
- data/ext/boost/thread/thread_functors.hpp +57 -0
- data/ext/boost/thread/thread_guard.hpp +46 -0
- data/ext/boost/thread/thread_only.hpp +29 -0
- data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
- data/ext/boost/thread/v2/thread.hpp +37 -10
- data/ext/boost/thread/xtime.hpp +2 -1
- data/ext/boost/token_functions.hpp +16 -16
- data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
- data/ext/boost/type_traits/add_reference.hpp +1 -1
- data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/common_type.hpp +11 -12
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
- data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
- data/ext/boost/type_traits/has_left_shift.hpp +49 -0
- data/ext/boost/type_traits/has_right_shift.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
- data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
- data/ext/boost/type_traits/intrinsics.hpp +18 -2
- data/ext/boost/type_traits/is_abstract.hpp +1 -1
- data/ext/boost/type_traits/is_array.hpp +1 -1
- data/ext/boost/type_traits/is_const.hpp +1 -1
- data/ext/boost/type_traits/is_convertible.hpp +78 -17
- data/ext/boost/type_traits/is_function.hpp +6 -1
- data/ext/boost/type_traits/is_integral.hpp +6 -1
- data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
- data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
- data/ext/boost/type_traits/is_pod.hpp +3 -1
- data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/ext/boost/type_traits/is_volatile.hpp +1 -1
- data/ext/boost/type_traits/make_signed.hpp +153 -0
- data/ext/boost/type_traits/make_unsigned.hpp +16 -0
- data/ext/boost/type_traits/remove_const.hpp +1 -1
- data/ext/boost/type_traits/remove_cv.hpp +1 -1
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/remove_volatile.hpp +1 -1
- data/ext/boost/unordered/detail/allocate.hpp +1120 -0
- data/ext/boost/unordered/detail/buckets.hpp +876 -0
- data/ext/boost/unordered/detail/equivalent.hpp +680 -0
- data/ext/boost/unordered/detail/extract_key.hpp +183 -0
- data/ext/boost/unordered/detail/fwd.hpp +23 -0
- data/ext/boost/unordered/detail/table.hpp +861 -0
- data/ext/boost/unordered/detail/unique.hpp +622 -0
- data/ext/boost/unordered/detail/util.hpp +260 -0
- data/ext/boost/unordered/unordered_map.hpp +1652 -0
- data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
- data/ext/boost/unordered/unordered_set.hpp +1549 -0
- data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
- data/ext/boost/unordered_map.hpp +18 -0
- data/ext/boost/unordered_set.hpp +18 -0
- data/ext/boost/utility/addressof.hpp +2 -2
- data/ext/boost/utility/result_of.hpp +8 -1
- data/ext/boost/version.hpp +2 -2
- data/ext/common/Account.h +1 -1
- data/ext/common/AccountsDatabase.h +1 -1
- data/ext/common/AgentsStarter.cpp +3 -1
- data/ext/common/AgentsStarter.h +2 -2
- data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
- data/ext/common/ApplicationPool2/AppTypes.h +17 -8
- data/ext/common/ApplicationPool2/Common.h +12 -12
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
- data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
- data/ext/common/ApplicationPool2/Group.h +6 -6
- data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
- data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
- data/ext/common/ApplicationPool2/Pool.h +21 -21
- data/ext/common/ApplicationPool2/Process.h +6 -6
- data/ext/common/ApplicationPool2/Session.h +1 -1
- data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
- data/ext/common/ApplicationPool2/Socket.h +2 -2
- data/ext/common/ApplicationPool2/Spawner.h +64 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
- data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
- data/ext/common/BackgroundEventLoop.cpp +4 -4
- data/ext/common/BackgroundEventLoop.h +1 -1
- data/ext/common/Constants.h +13 -1
- data/ext/common/EventedBufferedInput.h +8 -8
- data/ext/common/Exceptions.cpp +71 -0
- data/ext/common/Exceptions.h +60 -7
- data/ext/common/FileDescriptor.h +4 -4
- data/ext/common/MessageClient.h +1 -1
- data/ext/common/MessageServer.h +5 -5
- data/ext/common/MultiLibeio.cpp +3 -3
- data/ext/common/MultiLibeio.h +2 -2
- data/ext/common/RandomGenerator.h +11 -11
- data/ext/common/ResourceLocator.h +8 -1
- data/ext/common/SafeLibev.h +12 -12
- data/ext/common/ServerInstanceDir.h +11 -3
- data/ext/common/UnionStation.h +10 -10
- data/ext/common/Utils.cpp +11 -13
- data/ext/common/Utils.h +9 -9
- data/ext/common/Utils/BlockingQueue.h +10 -10
- data/ext/common/Utils/BufferedIO.h +1 -1
- data/ext/common/Utils/CachedFileStat.hpp +2 -2
- data/ext/common/Utils/FileChangeChecker.h +1 -1
- data/ext/common/Utils/HashMap.h +13 -4
- data/ext/common/Utils/IOUtils.cpp +33 -10
- data/ext/common/Utils/IniFile.h +3 -3
- data/ext/common/Utils/Lock.h +2 -2
- data/ext/common/Utils/MessagePassing.h +10 -10
- data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
- data/ext/common/Utils/ScopeGuard.h +5 -5
- data/ext/common/Utils/jsoncpp.cpp +2 -0
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
- data/ext/common/agents/HelperAgent/Main.cpp +18 -18
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
- data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
- data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
- data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/SpawnPreparer.cpp +1 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
- data/ext/common/agents/Watchdog/Main.cpp +81 -73
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/Makefile.in +110 -50
- data/ext/libev/README +8 -8
- data/ext/libev/aclocal.m4 +1503 -861
- data/ext/libev/config.guess +290 -304
- data/ext/libev/config.sub +77 -198
- data/ext/libev/configure +1735 -890
- data/ext/libev/configure.ac +3 -2
- data/ext/libev/ev++.h +6 -6
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/libev/event.c +29 -6
- data/ext/libev/event.h +9 -2
- data/ext/libev/ltmain.sh +2632 -1384
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +3 -1
- data/ext/nginx/ContentHandler.c +25 -2
- data/ext/nginx/CreateLocationConfig.c +1 -0
- data/ext/nginx/CreateLocationConfig.c.erb +1 -1
- data/ext/nginx/MergeLocationConfig.c +1 -0
- data/ext/nginx/MergeLocationConfig.c.erb +1 -1
- data/ext/nginx/config +12 -0
- data/ext/oxt/dynamic_thread_group.hpp +7 -4
- data/ext/oxt/system_calls.cpp +5 -1
- data/ext/oxt/system_calls.hpp +3 -0
- data/helper-scripts/node-loader.js +117 -249
- data/lib/phusion_passenger.rb +27 -5
- data/lib/phusion_passenger/abstract_installer.rb +104 -9
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
- data/lib/phusion_passenger/apache2/config_options.rb +6 -3
- data/lib/phusion_passenger/common_library.rb +7 -1
- data/lib/phusion_passenger/constants.rb +6 -0
- data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
- data/lib/phusion_passenger/nginx/config_options.rb +2 -1
- data/lib/phusion_passenger/packaging.rb +3 -0
- data/lib/phusion_passenger/platform_info/apache.rb +43 -6
- data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
- data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
- data/lib/phusion_passenger/platform_info/linux.rb +2 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
- data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
- data/lib/phusion_passenger/standalone/start_command.rb +8 -2
- data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
- data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
- data/node_lib/phusion_passenger/line_reader.js +154 -0
- data/node_lib/phusion_passenger/request_handler.js +65 -0
- data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
- data/resources/templates/apache2/deployment_example.txt.erb +2 -1
- data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
- data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
- data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/general_error_with_html.html.template +1 -1
- data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
- data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
- data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
- data/resources/templates/nginx/deployment_example.txt.erb +2 -1
- data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
- data/test/cxx/EventedBufferedInputTest.cpp +6 -6
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/MessagePassingTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +4 -4
- data/test/cxx/RequestHandlerTest.cpp +7 -7
- data/test/cxx/UnionStationTest.cpp +2 -2
- data/test/node/line_reader_spec.js +338 -0
- data/test/node/spec_helper.js +27 -0
- data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
- metadata +131 -22
- metadata.gz.asc +7 -7
- data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
- data/ext/boost/lambda/core.hpp +0 -79
- data/ext/boost/lambda/detail/actions.hpp +0 -174
- data/ext/boost/lambda/detail/arity_code.hpp +0 -110
- data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
- data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
- data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
- data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
- data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
- data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
- data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
- data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
- data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
- data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
- data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
- data/ext/boost/lambda/detail/operators.hpp +0 -370
- data/ext/boost/lambda/detail/ret.hpp +0 -325
- data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
- data/ext/boost/lambda/detail/select_functions.hpp +0 -74
- data/ext/boost/lambda/lambda.hpp +0 -34
@@ -0,0 +1,585 @@
|
|
1
|
+
#ifndef BOOST_ATOMIC_DETAIL_BASE_HPP
|
2
|
+
#define BOOST_ATOMIC_DETAIL_BASE_HPP
|
3
|
+
|
4
|
+
// Copyright (c) 2009 Helge Bahmann
|
5
|
+
// Copyright (c) 2013 Tim Blechmann
|
6
|
+
//
|
7
|
+
// Distributed under the Boost Software License, Version 1.0.
|
8
|
+
// See accompanying file LICENSE_1_0.txt or copy at
|
9
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
10
|
+
|
11
|
+
// Base class definition and fallback implementation.
|
12
|
+
// To be overridden (through partial specialization) by
|
13
|
+
// platform implementations.
|
14
|
+
|
15
|
+
#include <string.h>
|
16
|
+
|
17
|
+
#include <cstddef>
|
18
|
+
#include <boost/cstdint.hpp>
|
19
|
+
#include <boost/atomic/detail/config.hpp>
|
20
|
+
#include <boost/atomic/detail/lockpool.hpp>
|
21
|
+
|
22
|
+
#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
|
23
|
+
#pragma once
|
24
|
+
#endif
|
25
|
+
|
26
|
+
#define BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
|
27
|
+
bool \
|
28
|
+
compare_exchange_strong( \
|
29
|
+
value_type & expected, \
|
30
|
+
value_type desired, \
|
31
|
+
memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT \
|
32
|
+
{ \
|
33
|
+
return compare_exchange_strong(expected, desired, order, calculate_failure_order(order)); \
|
34
|
+
} \
|
35
|
+
\
|
36
|
+
bool \
|
37
|
+
compare_exchange_weak( \
|
38
|
+
value_type & expected, \
|
39
|
+
value_type desired, \
|
40
|
+
memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT \
|
41
|
+
{ \
|
42
|
+
return compare_exchange_weak(expected, desired, order, calculate_failure_order(order)); \
|
43
|
+
} \
|
44
|
+
|
45
|
+
#define BOOST_ATOMIC_DECLARE_ADDITIVE_OPERATORS \
|
46
|
+
value_type \
|
47
|
+
operator++(int) volatile BOOST_NOEXCEPT \
|
48
|
+
{ \
|
49
|
+
return fetch_add(1); \
|
50
|
+
} \
|
51
|
+
\
|
52
|
+
value_type \
|
53
|
+
operator++(void) volatile BOOST_NOEXCEPT \
|
54
|
+
{ \
|
55
|
+
return fetch_add(1) + 1; \
|
56
|
+
} \
|
57
|
+
\
|
58
|
+
value_type \
|
59
|
+
operator--(int) volatile BOOST_NOEXCEPT \
|
60
|
+
{ \
|
61
|
+
return fetch_sub(1); \
|
62
|
+
} \
|
63
|
+
\
|
64
|
+
value_type \
|
65
|
+
operator--(void) volatile BOOST_NOEXCEPT \
|
66
|
+
{ \
|
67
|
+
return fetch_sub(1) - 1; \
|
68
|
+
} \
|
69
|
+
\
|
70
|
+
value_type \
|
71
|
+
operator+=(difference_type v) volatile BOOST_NOEXCEPT \
|
72
|
+
{ \
|
73
|
+
return fetch_add(v) + v; \
|
74
|
+
} \
|
75
|
+
\
|
76
|
+
value_type \
|
77
|
+
operator-=(difference_type v) volatile BOOST_NOEXCEPT \
|
78
|
+
{ \
|
79
|
+
return fetch_sub(v) - v; \
|
80
|
+
} \
|
81
|
+
|
82
|
+
#define BOOST_ATOMIC_DECLARE_VOID_POINTER_ADDITIVE_OPERATORS \
|
83
|
+
value_type \
|
84
|
+
operator++(int) volatile BOOST_NOEXCEPT \
|
85
|
+
{ \
|
86
|
+
return fetch_add(1); \
|
87
|
+
} \
|
88
|
+
\
|
89
|
+
value_type \
|
90
|
+
operator++(void) volatile BOOST_NOEXCEPT \
|
91
|
+
{ \
|
92
|
+
return (char*)fetch_add(1) + 1; \
|
93
|
+
} \
|
94
|
+
\
|
95
|
+
value_type \
|
96
|
+
operator--(int) volatile BOOST_NOEXCEPT \
|
97
|
+
{ \
|
98
|
+
return fetch_sub(1); \
|
99
|
+
} \
|
100
|
+
\
|
101
|
+
value_type \
|
102
|
+
operator--(void) volatile BOOST_NOEXCEPT \
|
103
|
+
{ \
|
104
|
+
return (char*)fetch_sub(1) - 1; \
|
105
|
+
} \
|
106
|
+
\
|
107
|
+
value_type \
|
108
|
+
operator+=(difference_type v) volatile BOOST_NOEXCEPT \
|
109
|
+
{ \
|
110
|
+
return (char*)fetch_add(v) + v; \
|
111
|
+
} \
|
112
|
+
\
|
113
|
+
value_type \
|
114
|
+
operator-=(difference_type v) volatile BOOST_NOEXCEPT \
|
115
|
+
{ \
|
116
|
+
return (char*)fetch_sub(v) - v; \
|
117
|
+
} \
|
118
|
+
|
119
|
+
#define BOOST_ATOMIC_DECLARE_BIT_OPERATORS \
|
120
|
+
value_type \
|
121
|
+
operator&=(difference_type v) volatile BOOST_NOEXCEPT \
|
122
|
+
{ \
|
123
|
+
return fetch_and(v) & v; \
|
124
|
+
} \
|
125
|
+
\
|
126
|
+
value_type \
|
127
|
+
operator|=(difference_type v) volatile BOOST_NOEXCEPT \
|
128
|
+
{ \
|
129
|
+
return fetch_or(v) | v; \
|
130
|
+
} \
|
131
|
+
\
|
132
|
+
value_type \
|
133
|
+
operator^=(difference_type v) volatile BOOST_NOEXCEPT\
|
134
|
+
{ \
|
135
|
+
return fetch_xor(v) ^ v; \
|
136
|
+
} \
|
137
|
+
|
138
|
+
#define BOOST_ATOMIC_DECLARE_POINTER_OPERATORS \
|
139
|
+
BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
|
140
|
+
BOOST_ATOMIC_DECLARE_ADDITIVE_OPERATORS \
|
141
|
+
|
142
|
+
#define BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS \
|
143
|
+
BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
|
144
|
+
BOOST_ATOMIC_DECLARE_VOID_POINTER_ADDITIVE_OPERATORS \
|
145
|
+
|
146
|
+
#define BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS \
|
147
|
+
BOOST_ATOMIC_DECLARE_BASE_OPERATORS \
|
148
|
+
BOOST_ATOMIC_DECLARE_ADDITIVE_OPERATORS \
|
149
|
+
BOOST_ATOMIC_DECLARE_BIT_OPERATORS \
|
150
|
+
|
151
|
+
namespace boost {
|
152
|
+
namespace atomics {
|
153
|
+
namespace detail {
|
154
|
+
|
155
|
+
inline memory_order
|
156
|
+
calculate_failure_order(memory_order order)
|
157
|
+
{
|
158
|
+
switch(order) {
|
159
|
+
case memory_order_acq_rel:
|
160
|
+
return memory_order_acquire;
|
161
|
+
case memory_order_release:
|
162
|
+
return memory_order_relaxed;
|
163
|
+
default:
|
164
|
+
return order;
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
template<typename T, typename C, unsigned int Size, bool Sign>
|
169
|
+
class base_atomic
|
170
|
+
{
|
171
|
+
private:
|
172
|
+
typedef base_atomic this_type;
|
173
|
+
typedef T value_type;
|
174
|
+
typedef lockpool::scoped_lock guard_type;
|
175
|
+
typedef char storage_type[sizeof(value_type)];
|
176
|
+
|
177
|
+
public:
|
178
|
+
base_atomic(void) {}
|
179
|
+
|
180
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(v)
|
181
|
+
{}
|
182
|
+
|
183
|
+
void
|
184
|
+
store(value_type const& v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
185
|
+
{
|
186
|
+
char * storage = storage_ptr();
|
187
|
+
guard_type guard(storage);
|
188
|
+
|
189
|
+
memcpy(storage, &v, sizeof(value_type));
|
190
|
+
}
|
191
|
+
|
192
|
+
value_type
|
193
|
+
load(memory_order /*order*/ = memory_order_seq_cst) volatile const BOOST_NOEXCEPT
|
194
|
+
{
|
195
|
+
char * storage = storage_ptr();
|
196
|
+
guard_type guard(storage);
|
197
|
+
|
198
|
+
value_type v;
|
199
|
+
memcpy(&v, storage, sizeof(value_type));
|
200
|
+
return v;
|
201
|
+
}
|
202
|
+
|
203
|
+
bool
|
204
|
+
compare_exchange_strong(
|
205
|
+
value_type & expected,
|
206
|
+
value_type const& desired,
|
207
|
+
memory_order /*success_order*/,
|
208
|
+
memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
|
209
|
+
{
|
210
|
+
char * storage = storage_ptr();
|
211
|
+
guard_type guard(storage);
|
212
|
+
|
213
|
+
if (memcmp(storage, &expected, sizeof(value_type)) == 0) {
|
214
|
+
memcpy(storage, &desired, sizeof(value_type));
|
215
|
+
return true;
|
216
|
+
} else {
|
217
|
+
memcpy(&expected, storage, sizeof(value_type));
|
218
|
+
return false;
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
bool
|
223
|
+
compare_exchange_weak(
|
224
|
+
value_type & expected,
|
225
|
+
value_type const& desired,
|
226
|
+
memory_order success_order,
|
227
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
228
|
+
{
|
229
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
230
|
+
}
|
231
|
+
|
232
|
+
value_type
|
233
|
+
exchange(value_type const& v, memory_order /*order*/=memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
234
|
+
{
|
235
|
+
char * storage = storage_ptr();
|
236
|
+
guard_type guard(storage);
|
237
|
+
|
238
|
+
value_type tmp;
|
239
|
+
memcpy(&tmp, storage, sizeof(value_type));
|
240
|
+
|
241
|
+
memcpy(storage, &v, sizeof(value_type));
|
242
|
+
return tmp;
|
243
|
+
}
|
244
|
+
|
245
|
+
bool
|
246
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
247
|
+
{
|
248
|
+
return false;
|
249
|
+
}
|
250
|
+
|
251
|
+
BOOST_ATOMIC_DECLARE_BASE_OPERATORS
|
252
|
+
private:
|
253
|
+
char * storage_ptr() volatile const BOOST_NOEXCEPT
|
254
|
+
{
|
255
|
+
return const_cast<char *>(&reinterpret_cast<char const volatile &>(v_));
|
256
|
+
}
|
257
|
+
|
258
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
259
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
260
|
+
|
261
|
+
T v_;
|
262
|
+
};
|
263
|
+
|
264
|
+
template<typename T, unsigned int Size, bool Sign>
|
265
|
+
class base_atomic<T, int, Size, Sign>
|
266
|
+
{
|
267
|
+
private:
|
268
|
+
typedef base_atomic this_type;
|
269
|
+
typedef T value_type;
|
270
|
+
typedef T difference_type;
|
271
|
+
typedef lockpool::scoped_lock guard_type;
|
272
|
+
public:
|
273
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
|
274
|
+
base_atomic(void) {}
|
275
|
+
|
276
|
+
void
|
277
|
+
store(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
278
|
+
{
|
279
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
280
|
+
|
281
|
+
v_ = v;
|
282
|
+
}
|
283
|
+
|
284
|
+
value_type
|
285
|
+
load(memory_order /*order*/ = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
286
|
+
{
|
287
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
288
|
+
|
289
|
+
value_type v = const_cast<const volatile value_type &>(v_);
|
290
|
+
return v;
|
291
|
+
}
|
292
|
+
|
293
|
+
value_type
|
294
|
+
exchange(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
295
|
+
{
|
296
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
297
|
+
|
298
|
+
value_type old = v_;
|
299
|
+
v_ = v;
|
300
|
+
return old;
|
301
|
+
}
|
302
|
+
|
303
|
+
bool
|
304
|
+
compare_exchange_strong(value_type & expected, value_type desired,
|
305
|
+
memory_order /*success_order*/,
|
306
|
+
memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
|
307
|
+
{
|
308
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
309
|
+
|
310
|
+
if (v_ == expected) {
|
311
|
+
v_ = desired;
|
312
|
+
return true;
|
313
|
+
} else {
|
314
|
+
expected = v_;
|
315
|
+
return false;
|
316
|
+
}
|
317
|
+
}
|
318
|
+
|
319
|
+
bool
|
320
|
+
compare_exchange_weak(value_type & expected, value_type desired,
|
321
|
+
memory_order success_order,
|
322
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
323
|
+
{
|
324
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
325
|
+
}
|
326
|
+
|
327
|
+
value_type
|
328
|
+
fetch_add(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
329
|
+
{
|
330
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
331
|
+
|
332
|
+
value_type old = v_;
|
333
|
+
v_ += v;
|
334
|
+
return old;
|
335
|
+
}
|
336
|
+
|
337
|
+
value_type
|
338
|
+
fetch_sub(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
339
|
+
{
|
340
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
341
|
+
|
342
|
+
value_type old = v_;
|
343
|
+
v_ -= v;
|
344
|
+
return old;
|
345
|
+
}
|
346
|
+
|
347
|
+
value_type
|
348
|
+
fetch_and(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
349
|
+
{
|
350
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
351
|
+
|
352
|
+
value_type old = v_;
|
353
|
+
v_ &= v;
|
354
|
+
return old;
|
355
|
+
}
|
356
|
+
|
357
|
+
value_type
|
358
|
+
fetch_or(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
359
|
+
{
|
360
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
361
|
+
|
362
|
+
value_type old = v_;
|
363
|
+
v_ |= v;
|
364
|
+
return old;
|
365
|
+
}
|
366
|
+
|
367
|
+
value_type
|
368
|
+
fetch_xor(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
369
|
+
{
|
370
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
371
|
+
|
372
|
+
value_type old = v_;
|
373
|
+
v_ ^= v;
|
374
|
+
return old;
|
375
|
+
}
|
376
|
+
|
377
|
+
bool
|
378
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
379
|
+
{
|
380
|
+
return false;
|
381
|
+
}
|
382
|
+
|
383
|
+
BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
|
384
|
+
private:
|
385
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
386
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
387
|
+
value_type v_;
|
388
|
+
};
|
389
|
+
|
390
|
+
template<typename T, unsigned int Size, bool Sign>
|
391
|
+
class base_atomic<T *, void *, Size, Sign>
|
392
|
+
{
|
393
|
+
private:
|
394
|
+
typedef base_atomic this_type;
|
395
|
+
typedef T * value_type;
|
396
|
+
typedef ptrdiff_t difference_type;
|
397
|
+
typedef lockpool::scoped_lock guard_type;
|
398
|
+
public:
|
399
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
|
400
|
+
base_atomic(void) {}
|
401
|
+
|
402
|
+
void
|
403
|
+
store(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
404
|
+
{
|
405
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
406
|
+
v_ = v;
|
407
|
+
}
|
408
|
+
|
409
|
+
value_type
|
410
|
+
load(memory_order /*order*/ = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
411
|
+
{
|
412
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
413
|
+
|
414
|
+
value_type v = const_cast<const volatile value_type &>(v_);
|
415
|
+
return v;
|
416
|
+
}
|
417
|
+
|
418
|
+
value_type
|
419
|
+
exchange(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
420
|
+
{
|
421
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
422
|
+
|
423
|
+
value_type old = v_;
|
424
|
+
v_ = v;
|
425
|
+
return old;
|
426
|
+
}
|
427
|
+
|
428
|
+
bool
|
429
|
+
compare_exchange_strong(value_type & expected, value_type desired,
|
430
|
+
memory_order /*success_order*/,
|
431
|
+
memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
|
432
|
+
{
|
433
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
434
|
+
|
435
|
+
if (v_ == expected) {
|
436
|
+
v_ = desired;
|
437
|
+
return true;
|
438
|
+
} else {
|
439
|
+
expected = v_;
|
440
|
+
return false;
|
441
|
+
}
|
442
|
+
}
|
443
|
+
|
444
|
+
bool
|
445
|
+
compare_exchange_weak(value_type & expected, value_type desired,
|
446
|
+
memory_order success_order,
|
447
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
448
|
+
{
|
449
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
450
|
+
}
|
451
|
+
|
452
|
+
value_type fetch_add(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
453
|
+
{
|
454
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
455
|
+
|
456
|
+
value_type old = v_;
|
457
|
+
v_ += v;
|
458
|
+
return old;
|
459
|
+
}
|
460
|
+
|
461
|
+
value_type fetch_sub(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile
|
462
|
+
{
|
463
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
464
|
+
|
465
|
+
value_type old = v_;
|
466
|
+
v_ -= v;
|
467
|
+
return old;
|
468
|
+
}
|
469
|
+
|
470
|
+
bool
|
471
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
472
|
+
{
|
473
|
+
return false;
|
474
|
+
}
|
475
|
+
|
476
|
+
BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
|
477
|
+
private:
|
478
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
479
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
480
|
+
value_type v_;
|
481
|
+
};
|
482
|
+
|
483
|
+
template<unsigned int Size, bool Sign>
|
484
|
+
class base_atomic<void *, void *, Size, Sign>
|
485
|
+
{
|
486
|
+
private:
|
487
|
+
typedef base_atomic this_type;
|
488
|
+
typedef ptrdiff_t difference_type;
|
489
|
+
typedef void * value_type;
|
490
|
+
typedef lockpool::scoped_lock guard_type;
|
491
|
+
public:
|
492
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
|
493
|
+
base_atomic(void) {}
|
494
|
+
|
495
|
+
void
|
496
|
+
store(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
497
|
+
{
|
498
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
499
|
+
v_ = v;
|
500
|
+
}
|
501
|
+
|
502
|
+
value_type
|
503
|
+
load(memory_order /*order*/ = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
504
|
+
{
|
505
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
506
|
+
|
507
|
+
value_type v = const_cast<const volatile value_type &>(v_);
|
508
|
+
return v;
|
509
|
+
}
|
510
|
+
|
511
|
+
value_type
|
512
|
+
exchange(value_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
513
|
+
{
|
514
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
515
|
+
|
516
|
+
value_type old = v_;
|
517
|
+
v_ = v;
|
518
|
+
return old;
|
519
|
+
}
|
520
|
+
|
521
|
+
bool
|
522
|
+
compare_exchange_strong(value_type & expected, value_type desired,
|
523
|
+
memory_order /*success_order*/,
|
524
|
+
memory_order /*failure_order*/) volatile BOOST_NOEXCEPT
|
525
|
+
{
|
526
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
527
|
+
|
528
|
+
if (v_ == expected) {
|
529
|
+
v_ = desired;
|
530
|
+
return true;
|
531
|
+
} else {
|
532
|
+
expected = v_;
|
533
|
+
return false;
|
534
|
+
}
|
535
|
+
}
|
536
|
+
|
537
|
+
bool
|
538
|
+
compare_exchange_weak(value_type & expected, value_type desired,
|
539
|
+
memory_order success_order,
|
540
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
541
|
+
{
|
542
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
543
|
+
}
|
544
|
+
|
545
|
+
bool
|
546
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
547
|
+
{
|
548
|
+
return false;
|
549
|
+
}
|
550
|
+
|
551
|
+
value_type fetch_add(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
552
|
+
{
|
553
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
554
|
+
|
555
|
+
value_type old = v_;
|
556
|
+
char * cv = reinterpret_cast<char*>(old);
|
557
|
+
cv += v;
|
558
|
+
v_ = cv;
|
559
|
+
return old;
|
560
|
+
}
|
561
|
+
|
562
|
+
value_type fetch_sub(difference_type v, memory_order /*order*/ = memory_order_seq_cst) volatile
|
563
|
+
{
|
564
|
+
guard_type guard(const_cast<value_type *>(&v_));
|
565
|
+
|
566
|
+
value_type old = v_;
|
567
|
+
char * cv = reinterpret_cast<char*>(old);
|
568
|
+
cv -= v;
|
569
|
+
v_ = cv;
|
570
|
+
return old;
|
571
|
+
}
|
572
|
+
|
573
|
+
BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
|
574
|
+
|
575
|
+
private:
|
576
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
577
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
578
|
+
value_type v_;
|
579
|
+
};
|
580
|
+
|
581
|
+
}
|
582
|
+
}
|
583
|
+
}
|
584
|
+
|
585
|
+
#endif
|