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,443 @@
|
|
1
|
+
#ifndef BOOST_ATOMIC_DETAIL_CAS64STRONG_HPP
|
2
|
+
#define BOOST_ATOMIC_DETAIL_CAS64STRONG_HPP
|
3
|
+
|
4
|
+
// Distributed under the Boost Software License, Version 1.0.
|
5
|
+
// See accompanying file LICENSE_1_0.txt or copy at
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
//
|
8
|
+
// Copyright (c) 2011 Helge Bahmann
|
9
|
+
// Copyright (c) 2013 Tim Blechmann
|
10
|
+
|
11
|
+
// Build 64-bit atomic operation from platform_cmpxchg64_strong
|
12
|
+
// primitive. It is assumed that 64-bit loads/stores are not
|
13
|
+
// atomic, so they are funnelled through cmpxchg as well.
|
14
|
+
|
15
|
+
#include <cstddef>
|
16
|
+
#include <boost/cstdint.hpp>
|
17
|
+
#include <boost/memory_order.hpp>
|
18
|
+
#include <boost/atomic/detail/config.hpp>
|
19
|
+
#include <boost/atomic/detail/base.hpp>
|
20
|
+
|
21
|
+
#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
|
22
|
+
#pragma once
|
23
|
+
#endif
|
24
|
+
|
25
|
+
namespace boost {
|
26
|
+
namespace atomics {
|
27
|
+
namespace detail {
|
28
|
+
|
29
|
+
/* integral types */
|
30
|
+
|
31
|
+
template<typename T, bool Sign>
|
32
|
+
class base_atomic<T, int, 8, Sign>
|
33
|
+
{
|
34
|
+
typedef base_atomic this_type;
|
35
|
+
typedef T value_type;
|
36
|
+
typedef T difference_type;
|
37
|
+
public:
|
38
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
|
39
|
+
base_atomic(void) {}
|
40
|
+
|
41
|
+
void
|
42
|
+
store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
43
|
+
{
|
44
|
+
platform_fence_before_store(order);
|
45
|
+
platform_store64(v, &v_);
|
46
|
+
platform_fence_after_store(order);
|
47
|
+
}
|
48
|
+
|
49
|
+
value_type
|
50
|
+
load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
51
|
+
{
|
52
|
+
value_type v = platform_load64(&v_);
|
53
|
+
platform_fence_after_load(order);
|
54
|
+
return v;
|
55
|
+
}
|
56
|
+
|
57
|
+
value_type
|
58
|
+
exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
59
|
+
{
|
60
|
+
value_type original = load(memory_order_relaxed);
|
61
|
+
do {
|
62
|
+
} while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
|
63
|
+
return original;
|
64
|
+
}
|
65
|
+
|
66
|
+
bool
|
67
|
+
compare_exchange_weak(
|
68
|
+
value_type & expected,
|
69
|
+
value_type desired,
|
70
|
+
memory_order success_order,
|
71
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
72
|
+
{
|
73
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
74
|
+
}
|
75
|
+
|
76
|
+
bool
|
77
|
+
compare_exchange_strong(
|
78
|
+
value_type & expected,
|
79
|
+
value_type desired,
|
80
|
+
memory_order success_order,
|
81
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
82
|
+
{
|
83
|
+
platform_fence_before(success_order);
|
84
|
+
|
85
|
+
bool success = platform_cmpxchg64_strong(expected, desired, &v_);
|
86
|
+
|
87
|
+
if (success) {
|
88
|
+
platform_fence_after(success_order);
|
89
|
+
} else {
|
90
|
+
platform_fence_after(failure_order);
|
91
|
+
}
|
92
|
+
|
93
|
+
return success;
|
94
|
+
}
|
95
|
+
|
96
|
+
value_type
|
97
|
+
fetch_add(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
98
|
+
{
|
99
|
+
value_type original = load(memory_order_relaxed);
|
100
|
+
do {
|
101
|
+
} while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
|
102
|
+
return original;
|
103
|
+
}
|
104
|
+
|
105
|
+
value_type
|
106
|
+
fetch_sub(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
107
|
+
{
|
108
|
+
value_type original = load(memory_order_relaxed);
|
109
|
+
do {
|
110
|
+
} while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
|
111
|
+
return original;
|
112
|
+
}
|
113
|
+
|
114
|
+
value_type
|
115
|
+
fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
116
|
+
{
|
117
|
+
value_type original = load(memory_order_relaxed);
|
118
|
+
do {
|
119
|
+
} while (!compare_exchange_weak(original, original & v, order, memory_order_relaxed));
|
120
|
+
return original;
|
121
|
+
}
|
122
|
+
|
123
|
+
value_type
|
124
|
+
fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
125
|
+
{
|
126
|
+
value_type original = load(memory_order_relaxed);
|
127
|
+
do {
|
128
|
+
} while (!compare_exchange_weak(original, original | v, order, memory_order_relaxed));
|
129
|
+
return original;
|
130
|
+
}
|
131
|
+
|
132
|
+
value_type
|
133
|
+
fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
134
|
+
{
|
135
|
+
value_type original = load(memory_order_relaxed);
|
136
|
+
do {
|
137
|
+
} while (!compare_exchange_weak(original, original ^ v, order, memory_order_relaxed));
|
138
|
+
return original;
|
139
|
+
}
|
140
|
+
|
141
|
+
bool
|
142
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
143
|
+
{
|
144
|
+
return true;
|
145
|
+
}
|
146
|
+
|
147
|
+
BOOST_ATOMIC_DECLARE_INTEGRAL_OPERATORS
|
148
|
+
private:
|
149
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
150
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
151
|
+
value_type v_;
|
152
|
+
};
|
153
|
+
|
154
|
+
/* pointer types */
|
155
|
+
|
156
|
+
template<bool Sign>
|
157
|
+
class base_atomic<void *, void *, 8, Sign>
|
158
|
+
{
|
159
|
+
typedef base_atomic this_type;
|
160
|
+
typedef void * value_type;
|
161
|
+
typedef ptrdiff_t difference_type;
|
162
|
+
public:
|
163
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
|
164
|
+
base_atomic(void) {}
|
165
|
+
|
166
|
+
void
|
167
|
+
store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
168
|
+
{
|
169
|
+
platform_fence_before_store(order);
|
170
|
+
platform_store64(v, &v_);
|
171
|
+
platform_fence_after_store(order);
|
172
|
+
}
|
173
|
+
|
174
|
+
value_type
|
175
|
+
load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
176
|
+
{
|
177
|
+
value_type v = platform_load64(&v_);
|
178
|
+
platform_fence_after_load(order);
|
179
|
+
return v;
|
180
|
+
}
|
181
|
+
|
182
|
+
value_type
|
183
|
+
exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
184
|
+
{
|
185
|
+
value_type original = load(memory_order_relaxed);
|
186
|
+
do {
|
187
|
+
} while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
|
188
|
+
return original;
|
189
|
+
}
|
190
|
+
|
191
|
+
bool
|
192
|
+
compare_exchange_weak(
|
193
|
+
value_type & expected,
|
194
|
+
value_type desired,
|
195
|
+
memory_order success_order,
|
196
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
197
|
+
{
|
198
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
199
|
+
}
|
200
|
+
|
201
|
+
bool
|
202
|
+
compare_exchange_strong(
|
203
|
+
value_type & expected,
|
204
|
+
value_type desired,
|
205
|
+
memory_order success_order,
|
206
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
207
|
+
{
|
208
|
+
platform_fence_before(success_order);
|
209
|
+
|
210
|
+
bool success = platform_cmpxchg64_strong(expected, desired, &v_);
|
211
|
+
|
212
|
+
if (success) {
|
213
|
+
platform_fence_after(success_order);
|
214
|
+
} else {
|
215
|
+
platform_fence_after(failure_order);
|
216
|
+
}
|
217
|
+
|
218
|
+
return success;
|
219
|
+
}
|
220
|
+
|
221
|
+
value_type
|
222
|
+
fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
223
|
+
{
|
224
|
+
value_type original = load(memory_order_relaxed);
|
225
|
+
do {
|
226
|
+
} while (!compare_exchange_weak(original, (char*)original + v, order, memory_order_relaxed));
|
227
|
+
return original;
|
228
|
+
}
|
229
|
+
|
230
|
+
value_type
|
231
|
+
fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
232
|
+
{
|
233
|
+
value_type original = load(memory_order_relaxed);
|
234
|
+
do {
|
235
|
+
} while (!compare_exchange_weak(original, (char*)original - v, order, memory_order_relaxed));
|
236
|
+
return original;
|
237
|
+
}
|
238
|
+
|
239
|
+
bool
|
240
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
241
|
+
{
|
242
|
+
return true;
|
243
|
+
}
|
244
|
+
|
245
|
+
BOOST_ATOMIC_DECLARE_VOID_POINTER_OPERATORS
|
246
|
+
private:
|
247
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
248
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
249
|
+
value_type v_;
|
250
|
+
};
|
251
|
+
|
252
|
+
template<typename T, bool Sign>
|
253
|
+
class base_atomic<T *, void *, 8, Sign>
|
254
|
+
{
|
255
|
+
typedef base_atomic this_type;
|
256
|
+
typedef T * value_type;
|
257
|
+
typedef ptrdiff_t difference_type;
|
258
|
+
public:
|
259
|
+
BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : v_(v) {}
|
260
|
+
base_atomic(void) {}
|
261
|
+
|
262
|
+
void
|
263
|
+
store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
264
|
+
{
|
265
|
+
platform_fence_before_store(order);
|
266
|
+
platform_store64(v, &v_);
|
267
|
+
platform_fence_after_store(order);
|
268
|
+
}
|
269
|
+
|
270
|
+
value_type
|
271
|
+
load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
272
|
+
{
|
273
|
+
value_type v = platform_load64(&v_);
|
274
|
+
platform_fence_after_load(order);
|
275
|
+
return v;
|
276
|
+
}
|
277
|
+
|
278
|
+
value_type
|
279
|
+
exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
280
|
+
{
|
281
|
+
value_type original = load(memory_order_relaxed);
|
282
|
+
do {
|
283
|
+
} while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
|
284
|
+
return original;
|
285
|
+
}
|
286
|
+
|
287
|
+
bool
|
288
|
+
compare_exchange_weak(
|
289
|
+
value_type & expected,
|
290
|
+
value_type desired,
|
291
|
+
memory_order success_order,
|
292
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
293
|
+
{
|
294
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
295
|
+
}
|
296
|
+
|
297
|
+
bool
|
298
|
+
compare_exchange_strong(
|
299
|
+
value_type & expected,
|
300
|
+
value_type desired,
|
301
|
+
memory_order success_order,
|
302
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
303
|
+
{
|
304
|
+
platform_fence_before(success_order);
|
305
|
+
|
306
|
+
bool success = platform_cmpxchg64_strong(expected, desired, &v_);
|
307
|
+
|
308
|
+
if (success) {
|
309
|
+
platform_fence_after(success_order);
|
310
|
+
} else {
|
311
|
+
platform_fence_after(failure_order);
|
312
|
+
}
|
313
|
+
|
314
|
+
return success;
|
315
|
+
}
|
316
|
+
|
317
|
+
value_type
|
318
|
+
fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
319
|
+
{
|
320
|
+
value_type original = load(memory_order_relaxed);
|
321
|
+
do {
|
322
|
+
} while (!compare_exchange_weak(original, original + v, order, memory_order_relaxed));
|
323
|
+
return original;
|
324
|
+
}
|
325
|
+
|
326
|
+
value_type
|
327
|
+
fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
328
|
+
{
|
329
|
+
value_type original = load(memory_order_relaxed);
|
330
|
+
do {
|
331
|
+
} while (!compare_exchange_weak(original, original - v, order, memory_order_relaxed));
|
332
|
+
return original;
|
333
|
+
}
|
334
|
+
|
335
|
+
bool
|
336
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
337
|
+
{
|
338
|
+
return true;
|
339
|
+
}
|
340
|
+
|
341
|
+
BOOST_ATOMIC_DECLARE_POINTER_OPERATORS
|
342
|
+
private:
|
343
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
344
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
345
|
+
value_type v_;
|
346
|
+
};
|
347
|
+
|
348
|
+
/* generic types */
|
349
|
+
|
350
|
+
template<typename T, bool Sign>
|
351
|
+
class base_atomic<T, void, 8, Sign>
|
352
|
+
{
|
353
|
+
typedef base_atomic this_type;
|
354
|
+
typedef T value_type;
|
355
|
+
typedef uint64_t storage_type;
|
356
|
+
public:
|
357
|
+
explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
|
358
|
+
{
|
359
|
+
memcpy(&v_, &v, sizeof(value_type));
|
360
|
+
}
|
361
|
+
base_atomic(void) {}
|
362
|
+
|
363
|
+
void
|
364
|
+
store(value_type const& value, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
365
|
+
{
|
366
|
+
storage_type value_s = 0;
|
367
|
+
memcpy(&value_s, &value, sizeof(value_type));
|
368
|
+
platform_fence_before_store(order);
|
369
|
+
platform_store64(value_s, &v_);
|
370
|
+
platform_fence_after_store(order);
|
371
|
+
}
|
372
|
+
|
373
|
+
value_type
|
374
|
+
load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
375
|
+
{
|
376
|
+
storage_type value_s = platform_load64(&v_);
|
377
|
+
platform_fence_after_load(order);
|
378
|
+
value_type value;
|
379
|
+
memcpy(&value, &value_s, sizeof(value_type));
|
380
|
+
return value;
|
381
|
+
}
|
382
|
+
|
383
|
+
value_type
|
384
|
+
exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
385
|
+
{
|
386
|
+
value_type original = load(memory_order_relaxed);
|
387
|
+
do {
|
388
|
+
} while (!compare_exchange_weak(original, v, order, memory_order_relaxed));
|
389
|
+
return original;
|
390
|
+
}
|
391
|
+
|
392
|
+
bool
|
393
|
+
compare_exchange_weak(
|
394
|
+
value_type & expected,
|
395
|
+
value_type const& desired,
|
396
|
+
memory_order success_order,
|
397
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
398
|
+
{
|
399
|
+
return compare_exchange_strong(expected, desired, success_order, failure_order);
|
400
|
+
}
|
401
|
+
|
402
|
+
bool
|
403
|
+
compare_exchange_strong(
|
404
|
+
value_type & expected,
|
405
|
+
value_type const& desired,
|
406
|
+
memory_order success_order,
|
407
|
+
memory_order failure_order) volatile BOOST_NOEXCEPT
|
408
|
+
{
|
409
|
+
storage_type expected_s = 0, desired_s = 0;
|
410
|
+
memcpy(&expected_s, &expected, sizeof(value_type));
|
411
|
+
memcpy(&desired_s, &desired, sizeof(value_type));
|
412
|
+
|
413
|
+
platform_fence_before(success_order);
|
414
|
+
bool success = platform_cmpxchg64_strong(expected_s, desired_s, &v_);
|
415
|
+
|
416
|
+
if (success) {
|
417
|
+
platform_fence_after(success_order);
|
418
|
+
} else {
|
419
|
+
platform_fence_after(failure_order);
|
420
|
+
memcpy(&expected, &expected_s, sizeof(value_type));
|
421
|
+
}
|
422
|
+
|
423
|
+
return success;
|
424
|
+
}
|
425
|
+
|
426
|
+
bool
|
427
|
+
is_lock_free(void) const volatile BOOST_NOEXCEPT
|
428
|
+
{
|
429
|
+
return true;
|
430
|
+
}
|
431
|
+
|
432
|
+
BOOST_ATOMIC_DECLARE_BASE_OPERATORS
|
433
|
+
private:
|
434
|
+
base_atomic(const base_atomic &) /* = delete */ ;
|
435
|
+
void operator=(const base_atomic &) /* = delete */ ;
|
436
|
+
storage_type v_;
|
437
|
+
};
|
438
|
+
|
439
|
+
}
|
440
|
+
}
|
441
|
+
}
|
442
|
+
|
443
|
+
#endif
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#ifndef BOOST_ATOMIC_DETAIL_CONFIG_HPP
|
2
|
+
#define BOOST_ATOMIC_DETAIL_CONFIG_HPP
|
3
|
+
|
4
|
+
// Copyright (c) 2012 Hartmut Kaiser
|
5
|
+
//
|
6
|
+
// Distributed under the Boost Software License, Version 1.0.
|
7
|
+
// See accompanying file LICENSE_1_0.txt or copy at
|
8
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
9
|
+
|
10
|
+
#include <boost/config.hpp>
|
11
|
+
|
12
|
+
#if (defined(_MSC_VER) && (_MSC_VER >= 1020)) || defined(__GNUC__) || defined(BOOST_CLANG) || defined(BOOST_INTEL) || defined(__COMO__) || defined(__DMC__)
|
13
|
+
#define BOOST_ATOMIC_HAS_PRAGMA_ONCE
|
14
|
+
#endif
|
15
|
+
|
16
|
+
#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
|
17
|
+
#pragma once
|
18
|
+
#endif
|
19
|
+
|
20
|
+
///////////////////////////////////////////////////////////////////////////////
|
21
|
+
// Set up dll import/export options
|
22
|
+
#if (defined(BOOST_ATOMIC_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && \
|
23
|
+
!defined(BOOST_ATOMIC_STATIC_LINK)
|
24
|
+
|
25
|
+
#if defined(BOOST_ATOMIC_SOURCE)
|
26
|
+
#define BOOST_ATOMIC_DECL BOOST_SYMBOL_EXPORT
|
27
|
+
#define BOOST_ATOMIC_BUILD_DLL
|
28
|
+
#else
|
29
|
+
#define BOOST_ATOMIC_DECL BOOST_SYMBOL_IMPORT
|
30
|
+
#endif
|
31
|
+
|
32
|
+
#endif // building a shared library
|
33
|
+
|
34
|
+
#ifndef BOOST_ATOMIC_DECL
|
35
|
+
#define BOOST_ATOMIC_DECL
|
36
|
+
#endif
|
37
|
+
|
38
|
+
///////////////////////////////////////////////////////////////////////////////
|
39
|
+
// Auto library naming
|
40
|
+
#if !defined(BOOST_ATOMIC_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
|
41
|
+
!defined(BOOST_ATOMIC_NO_LIB)
|
42
|
+
|
43
|
+
#define BOOST_LIB_NAME boost_atomic
|
44
|
+
|
45
|
+
// tell the auto-link code to select a dll when required:
|
46
|
+
#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_ATOMIC_DYN_LINK)
|
47
|
+
#define BOOST_DYN_LINK
|
48
|
+
#endif
|
49
|
+
|
50
|
+
#include <boost/config/auto_link.hpp>
|
51
|
+
|
52
|
+
#endif // auto-linking disabled
|
53
|
+
|
54
|
+
#endif
|