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,73 @@
|
|
1
|
+
/*
|
2
|
+
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
+
* Copyright (c) 2010-2013 Phusion
|
4
|
+
*
|
5
|
+
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
|
+
*
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
12
|
+
* furnished to do so, subject to the following conditions:
|
13
|
+
*
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
15
|
+
* all copies or substantial portions of the Software.
|
16
|
+
*
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
* THE SOFTWARE.
|
24
|
+
*/
|
25
|
+
|
26
|
+
/*
|
27
|
+
* SetHeaders.cpp is automatically generated from SetHeaders.cpp.erb,
|
28
|
+
* using definitions from lib/phusion_passenger/apache2/config_options.rb.
|
29
|
+
* Edits to SetHeaders.cpp will be lost.
|
30
|
+
*
|
31
|
+
* To update SetHeaders.cpp:
|
32
|
+
* rake apache2
|
33
|
+
*
|
34
|
+
* To force regeneration of SetHeaders.cpp:
|
35
|
+
* rm -f ext/apache2/SetHeaders.cpp
|
36
|
+
* rake ext/apache2/SetHeaders.cpp
|
37
|
+
*/
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
addHeader(output, "PASSENGER_RUBY", config->ruby ? config->ruby : serverConfig.defaultRuby);
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
addHeader(r, output, "PASSENGER_MIN_INSTANCES", config->minInstances);
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
addHeader(output, "PASSENGER_USER", config->user);
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
addHeader(output, "PASSENGER_GROUP", config->group);
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
addHeader(r, output, "PASSENGER_MAX_REQUESTS", config->maxRequests);
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
addHeader(r, output, "PASSENGER_START_TIMEOUT", config->startTimeout);
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
addHeader(r, output, "PASSENGER_MAX_REQUEST_QUEUE_SIZE", config->maxRequestQueueSize);
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
addHeader(r, output, "PASSENGER_LOAD_SHELL_ENVVARS", config->loadShellEnvvars);
|
72
|
+
|
73
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
/*
|
2
|
+
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
+
* Copyright (c) 2010-2013 Phusion
|
4
|
+
*
|
5
|
+
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
|
+
*
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
12
|
+
* furnished to do so, subject to the following conditions:
|
13
|
+
*
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
15
|
+
* all copies or substantial portions of the Software.
|
16
|
+
*
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
* THE SOFTWARE.
|
24
|
+
*/
|
25
|
+
|
26
|
+
/*
|
27
|
+
* SetHeaders.cpp is automatically generated from SetHeaders.cpp.erb,
|
28
|
+
* using definitions from lib/phusion_passenger/apache2/config_options.rb.
|
29
|
+
* Edits to SetHeaders.cpp will be lost.
|
30
|
+
*
|
31
|
+
* To update SetHeaders.cpp:
|
32
|
+
* rake apache2
|
33
|
+
*
|
34
|
+
* To force regeneration of SetHeaders.cpp:
|
35
|
+
* rm -f ext/apache2/SetHeaders.cpp
|
36
|
+
* rake ext/apache2/SetHeaders.cpp
|
37
|
+
*/
|
38
|
+
|
39
|
+
<%
|
40
|
+
require 'phusion_passenger/apache2/config_options'
|
41
|
+
|
42
|
+
def filter_eligible_options(options)
|
43
|
+
return options.reject do |option|
|
44
|
+
option[:alias_for] ||
|
45
|
+
option.fetch(:field, true).nil? ||
|
46
|
+
option[:field].to_s =~ /\./ ||
|
47
|
+
(option.has_key?(:header) && !option[:header])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def struct_field_for(option)
|
52
|
+
if option.has_key?(:field)
|
53
|
+
return option[:field]
|
54
|
+
else
|
55
|
+
result = option[:name].sub(/^Passenger/, '')
|
56
|
+
result[0] = result[0..0].downcase
|
57
|
+
return result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def header_name_for(option)
|
62
|
+
if option[:header]
|
63
|
+
return option[:header].inspect
|
64
|
+
else
|
65
|
+
result = option[:name].sub(/^Passenger/, '')
|
66
|
+
result.gsub!(/([A-Z])/, '_\1')
|
67
|
+
return "PASSENGER#{result.upcase}".inspect
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def header_expression_for(option)
|
72
|
+
if option[:header_expression]
|
73
|
+
return option[:header_expression]
|
74
|
+
else
|
75
|
+
return "config->" + struct_field_for(option)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
%>
|
79
|
+
|
80
|
+
<% for option in filter_eligible_options(APACHE2_DIRECTORY_CONFIGURATION_OPTIONS) %>
|
81
|
+
<% if option[:type] == :string %>
|
82
|
+
addHeader(output, <%= header_name_for(option) %>, <%= header_expression_for(option) %>);
|
83
|
+
<% elsif option[:type] == :integer || option[:type] == :flag %>
|
84
|
+
addHeader(r, output, <%= header_name_for(option) %>, <%= header_expression_for(option) %>);
|
85
|
+
<% else %>
|
86
|
+
<% raise "Unknown option type #{option[:type].inspect} for option #{option[:name]}" %>
|
87
|
+
<% end %>
|
88
|
+
<% end %>
|
@@ -56,7 +56,7 @@ namespace boost {
|
|
56
56
|
// Copy the beginning of the sequence
|
57
57
|
Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output );
|
58
58
|
// Format find result
|
59
|
-
// Copy
|
59
|
+
// Copy formatted result
|
60
60
|
Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
|
61
61
|
// Copy the rest of the sequence
|
62
62
|
Output = std::copy( M.end(), ::boost::end(Input), Output );
|
@@ -118,11 +118,11 @@ namespace boost {
|
|
118
118
|
|
119
119
|
InputT Output;
|
120
120
|
// Copy the beginning of the sequence
|
121
|
-
insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );
|
122
|
-
// Copy
|
123
|
-
insert( Output, ::boost::end(Output), M.format_result() );
|
121
|
+
boost::algorithm::detail::insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );
|
122
|
+
// Copy formatted result
|
123
|
+
boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() );
|
124
124
|
// Copy the rest of the sequence
|
125
|
-
insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );
|
125
|
+
boost::algorithm::detail::insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );
|
126
126
|
|
127
127
|
return Output;
|
128
128
|
}
|
@@ -58,7 +58,7 @@ namespace boost {
|
|
58
58
|
{
|
59
59
|
// Copy the beginning of the sequence
|
60
60
|
Output = std::copy( LastMatch, M.begin(), Output );
|
61
|
-
// Copy
|
61
|
+
// Copy formatted result
|
62
62
|
Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
|
63
63
|
|
64
64
|
// Proceed to the next match
|
@@ -134,9 +134,9 @@ namespace boost {
|
|
134
134
|
while( M )
|
135
135
|
{
|
136
136
|
// Copy the beginning of the sequence
|
137
|
-
insert( Output, ::boost::end(Output), LastMatch, M.begin() );
|
138
|
-
// Copy
|
139
|
-
insert( Output, ::boost::end(Output), M.format_result() );
|
137
|
+
boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, M.begin() );
|
138
|
+
// Copy formatted result
|
139
|
+
boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() );
|
140
140
|
|
141
141
|
// Proceed to the next match
|
142
142
|
LastMatch=M.end();
|
@@ -218,7 +218,7 @@ namespace boost {
|
|
218
218
|
// Adjust search iterator
|
219
219
|
SearchIt=M.end();
|
220
220
|
|
221
|
-
// Copy
|
221
|
+
// Copy formatted replace to the storage
|
222
222
|
::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() );
|
223
223
|
|
224
224
|
// Find range for a next match
|
@@ -92,7 +92,7 @@ namespace boost {
|
|
92
92
|
|
93
93
|
// find last functor -----------------------------------------------//
|
94
94
|
|
95
|
-
// find the last match a
|
95
|
+
// find the last match a subsequence in the sequence ( functor )
|
96
96
|
/*
|
97
97
|
Returns a pair <begin,end> marking the subsequence in the sequence.
|
98
98
|
If the find fails, returns <End,End>
|
@@ -39,7 +39,7 @@ namespace boost {
|
|
39
39
|
Constructs a \c const_formatter. Const formatter always returns
|
40
40
|
the same value, regardless of the parameter.
|
41
41
|
|
42
|
-
\param Format A predefined value used as a result for
|
42
|
+
\param Format A predefined value used as a result for formatting
|
43
43
|
\return An instance of the \c const_formatter object.
|
44
44
|
*/
|
45
45
|
template<typename RangeT>
|
@@ -95,7 +95,7 @@ namespace boost {
|
|
95
95
|
to extract a portion of the formatted sequence. The first finder's match is returned
|
96
96
|
as a result
|
97
97
|
|
98
|
-
\param Finder a finder used to select a portion of the
|
98
|
+
\param Finder a finder used to select a portion of the formatted sequence
|
99
99
|
\return An instance of the \c dissect_formatter object.
|
100
100
|
*/
|
101
101
|
template<typename FinderT>
|
data/ext/boost/assert.hpp
CHANGED
@@ -101,7 +101,12 @@ namespace boost
|
|
101
101
|
<< "***** Internal Program Error - assertion (" << expr << ") failed in "
|
102
102
|
<< function << ":\n"
|
103
103
|
<< file << '(' << line << "): " << msg << std::endl;
|
104
|
-
|
104
|
+
#ifdef UNDER_CE
|
105
|
+
// The Windows CE CRT library does not have abort() so use exit(-1) instead.
|
106
|
+
std::exit(-1);
|
107
|
+
#else
|
108
|
+
std::abort();
|
109
|
+
#endif
|
105
110
|
}
|
106
111
|
} // detail
|
107
112
|
} // assertion
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#ifndef BOOST_ATOMIC_HPP
|
2
|
+
#define BOOST_ATOMIC_HPP
|
3
|
+
|
4
|
+
// Copyright (c) 2011 Helge Bahmann
|
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
|
+
// This header includes all Boost.Atomic public headers
|
11
|
+
|
12
|
+
#include <boost/atomic/atomic.hpp>
|
13
|
+
|
14
|
+
#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
|
15
|
+
#pragma once
|
16
|
+
#endif
|
17
|
+
|
18
|
+
#endif
|
@@ -0,0 +1,241 @@
|
|
1
|
+
#ifndef BOOST_ATOMIC_ATOMIC_HPP
|
2
|
+
#define BOOST_ATOMIC_ATOMIC_HPP
|
3
|
+
|
4
|
+
// Copyright (c) 2011 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
|
+
#include <cstddef>
|
12
|
+
#include <boost/cstdint.hpp>
|
13
|
+
|
14
|
+
#include <boost/memory_order.hpp>
|
15
|
+
|
16
|
+
#include <boost/atomic/detail/config.hpp>
|
17
|
+
#include <boost/atomic/detail/platform.hpp>
|
18
|
+
#include <boost/atomic/detail/type-classification.hpp>
|
19
|
+
#include <boost/type_traits/is_signed.hpp>
|
20
|
+
#if defined(BOOST_MSVC) && BOOST_MSVC < 1400
|
21
|
+
#include <boost/type_traits/is_integral.hpp>
|
22
|
+
#include <boost/mpl/and.hpp>
|
23
|
+
#endif
|
24
|
+
|
25
|
+
#ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
|
26
|
+
#pragma once
|
27
|
+
#endif
|
28
|
+
|
29
|
+
namespace boost {
|
30
|
+
|
31
|
+
#ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
|
32
|
+
#define BOOST_ATOMIC_CHAR_LOCK_FREE 0
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
|
36
|
+
#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 0
|
37
|
+
#endif
|
38
|
+
|
39
|
+
#ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
|
40
|
+
#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 0
|
41
|
+
#endif
|
42
|
+
|
43
|
+
#ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
|
44
|
+
#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
|
45
|
+
#endif
|
46
|
+
|
47
|
+
#ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
|
48
|
+
#define BOOST_ATOMIC_SHORT_LOCK_FREE 0
|
49
|
+
#endif
|
50
|
+
|
51
|
+
#ifndef BOOST_ATOMIC_INT_LOCK_FREE
|
52
|
+
#define BOOST_ATOMIC_INT_LOCK_FREE 0
|
53
|
+
#endif
|
54
|
+
|
55
|
+
#ifndef BOOST_ATOMIC_LONG_LOCK_FREE
|
56
|
+
#define BOOST_ATOMIC_LONG_LOCK_FREE 0
|
57
|
+
#endif
|
58
|
+
|
59
|
+
#ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
|
60
|
+
#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
|
61
|
+
#endif
|
62
|
+
|
63
|
+
#ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
|
64
|
+
#define BOOST_ATOMIC_POINTER_LOCK_FREE 0
|
65
|
+
#endif
|
66
|
+
|
67
|
+
#define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
|
68
|
+
|
69
|
+
#ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
|
70
|
+
#define BOOST_ATOMIC_BOOL_LOCK_FREE 0
|
71
|
+
#endif
|
72
|
+
|
73
|
+
#ifndef BOOST_ATOMIC_THREAD_FENCE
|
74
|
+
#define BOOST_ATOMIC_THREAD_FENCE 0
|
75
|
+
inline void atomic_thread_fence(memory_order)
|
76
|
+
{
|
77
|
+
}
|
78
|
+
#endif
|
79
|
+
|
80
|
+
#ifndef BOOST_ATOMIC_SIGNAL_FENCE
|
81
|
+
#define BOOST_ATOMIC_SIGNAL_FENCE 0
|
82
|
+
inline void atomic_signal_fence(memory_order order)
|
83
|
+
{
|
84
|
+
atomic_thread_fence(order);
|
85
|
+
}
|
86
|
+
#endif
|
87
|
+
|
88
|
+
template<typename T>
|
89
|
+
class atomic :
|
90
|
+
public atomics::detail::base_atomic<
|
91
|
+
T,
|
92
|
+
typename atomics::detail::classify<T>::type,
|
93
|
+
atomics::detail::storage_size_of<T>::value,
|
94
|
+
#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1400
|
95
|
+
boost::is_signed<T>::value
|
96
|
+
#else
|
97
|
+
// MSVC 2003 has problems instantiating is_signed on non-integral types
|
98
|
+
mpl::and_< boost::is_integral<T>, boost::is_signed<T> >::value
|
99
|
+
#endif
|
100
|
+
>
|
101
|
+
{
|
102
|
+
private:
|
103
|
+
typedef T value_type;
|
104
|
+
typedef atomics::detail::base_atomic<
|
105
|
+
T,
|
106
|
+
typename atomics::detail::classify<T>::type,
|
107
|
+
atomics::detail::storage_size_of<T>::value,
|
108
|
+
#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1400
|
109
|
+
boost::is_signed<T>::value
|
110
|
+
#else
|
111
|
+
// MSVC 2003 has problems instantiating is_signed on non-itegral types
|
112
|
+
mpl::and_< boost::is_integral<T>, boost::is_signed<T> >::value
|
113
|
+
#endif
|
114
|
+
> super;
|
115
|
+
public:
|
116
|
+
atomic(void) BOOST_NOEXCEPT : super() {}
|
117
|
+
BOOST_CONSTEXPR atomic(value_type v) BOOST_NOEXCEPT : super(v) {}
|
118
|
+
|
119
|
+
value_type operator=(value_type v) volatile BOOST_NOEXCEPT
|
120
|
+
{
|
121
|
+
this->store(v);
|
122
|
+
return v;
|
123
|
+
}
|
124
|
+
|
125
|
+
operator value_type(void) volatile const BOOST_NOEXCEPT
|
126
|
+
{
|
127
|
+
return this->load();
|
128
|
+
}
|
129
|
+
|
130
|
+
#ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
|
131
|
+
private:
|
132
|
+
atomic(const atomic &) /* =delete */ ;
|
133
|
+
atomic & operator=(const atomic &) volatile /* =delete */ ;
|
134
|
+
#else
|
135
|
+
atomic(const atomic &) = delete;
|
136
|
+
atomic & operator=(const atomic &) volatile = delete;
|
137
|
+
#endif
|
138
|
+
};
|
139
|
+
|
140
|
+
typedef atomic<char> atomic_char;
|
141
|
+
typedef atomic<unsigned char> atomic_uchar;
|
142
|
+
typedef atomic<signed char> atomic_schar;
|
143
|
+
typedef atomic<uint8_t> atomic_uint8_t;
|
144
|
+
typedef atomic<int8_t> atomic_int8_t;
|
145
|
+
typedef atomic<unsigned short> atomic_ushort;
|
146
|
+
typedef atomic<short> atomic_short;
|
147
|
+
typedef atomic<uint16_t> atomic_uint16_t;
|
148
|
+
typedef atomic<int16_t> atomic_int16_t;
|
149
|
+
typedef atomic<unsigned int> atomic_uint;
|
150
|
+
typedef atomic<int> atomic_int;
|
151
|
+
typedef atomic<uint32_t> atomic_uint32_t;
|
152
|
+
typedef atomic<int32_t> atomic_int32_t;
|
153
|
+
typedef atomic<unsigned long> atomic_ulong;
|
154
|
+
typedef atomic<long> atomic_long;
|
155
|
+
typedef atomic<uint64_t> atomic_uint64_t;
|
156
|
+
typedef atomic<int64_t> atomic_int64_t;
|
157
|
+
#ifdef BOOST_HAS_LONG_LONG
|
158
|
+
typedef atomic<boost::ulong_long_type> atomic_ullong;
|
159
|
+
typedef atomic<boost::long_long_type> atomic_llong;
|
160
|
+
#endif
|
161
|
+
typedef atomic<void*> atomic_address;
|
162
|
+
typedef atomic<bool> atomic_bool;
|
163
|
+
typedef atomic<wchar_t> atomic_wchar_t;
|
164
|
+
#if !defined(BOOST_NO_CXX11_CHAR16_T)
|
165
|
+
typedef atomic<char16_t> atomic_char16_t;
|
166
|
+
#endif
|
167
|
+
#if !defined(BOOST_NO_CXX11_CHAR32_T)
|
168
|
+
typedef atomic<char32_t> atomic_char32_t;
|
169
|
+
#endif
|
170
|
+
|
171
|
+
typedef atomic<int_least8_t> atomic_int_least8_t;
|
172
|
+
typedef atomic<uint_least8_t> atomic_uint_least8_t;
|
173
|
+
typedef atomic<int_least16_t> atomic_int_least16_t;
|
174
|
+
typedef atomic<uint_least16_t> atomic_uint_least16_t;
|
175
|
+
typedef atomic<int_least32_t> atomic_int_least32_t;
|
176
|
+
typedef atomic<uint_least32_t> atomic_uint_least32_t;
|
177
|
+
typedef atomic<int_least64_t> atomic_int_least64_t;
|
178
|
+
typedef atomic<uint_least64_t> atomic_uint_least64_t;
|
179
|
+
typedef atomic<int_fast8_t> atomic_int_fast8_t;
|
180
|
+
typedef atomic<uint_fast8_t> atomic_uint_fast8_t;
|
181
|
+
typedef atomic<int_fast16_t> atomic_int_fast16_t;
|
182
|
+
typedef atomic<uint_fast16_t> atomic_uint_fast16_t;
|
183
|
+
typedef atomic<int_fast32_t> atomic_int_fast32_t;
|
184
|
+
typedef atomic<uint_fast32_t> atomic_uint_fast32_t;
|
185
|
+
typedef atomic<int_fast64_t> atomic_int_fast64_t;
|
186
|
+
typedef atomic<uint_fast64_t> atomic_uint_fast64_t;
|
187
|
+
typedef atomic<intmax_t> atomic_intmax_t;
|
188
|
+
typedef atomic<uintmax_t> atomic_uintmax_t;
|
189
|
+
|
190
|
+
typedef atomic<std::size_t> atomic_size_t;
|
191
|
+
typedef atomic<std::ptrdiff_t> atomic_ptrdiff_t;
|
192
|
+
|
193
|
+
// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
|
194
|
+
#if !defined(__PGIC__)
|
195
|
+
|
196
|
+
#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
|
197
|
+
|| (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
|
198
|
+
|| defined(__CYGWIN__) \
|
199
|
+
|| defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
|
200
|
+
|| defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
|
201
|
+
typedef atomic<intptr_t> atomic_intptr_t;
|
202
|
+
typedef atomic<uintptr_t> atomic_uintptr_t;
|
203
|
+
#elif defined(__GNUC__) || defined(__clang__)
|
204
|
+
#if defined(__INTPTR_TYPE__)
|
205
|
+
typedef atomic< __INTPTR_TYPE__ > atomic_intptr_t;
|
206
|
+
#endif
|
207
|
+
#if defined(__UINTPTR_TYPE__)
|
208
|
+
typedef atomic< __UINTPTR_TYPE__ > atomic_uintptr_t;
|
209
|
+
#endif
|
210
|
+
#endif
|
211
|
+
|
212
|
+
#endif
|
213
|
+
|
214
|
+
#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
|
215
|
+
#define BOOST_ATOMIC_FLAG_LOCK_FREE 0
|
216
|
+
class atomic_flag
|
217
|
+
{
|
218
|
+
public:
|
219
|
+
BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(false) {}
|
220
|
+
|
221
|
+
bool
|
222
|
+
test_and_set(memory_order order = memory_order_seq_cst) BOOST_NOEXCEPT
|
223
|
+
{
|
224
|
+
return v_.exchange(true, order);
|
225
|
+
}
|
226
|
+
|
227
|
+
void
|
228
|
+
clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
229
|
+
{
|
230
|
+
v_.store(false, order);
|
231
|
+
}
|
232
|
+
private:
|
233
|
+
atomic_flag(const atomic_flag &) /* = delete */ ;
|
234
|
+
atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
|
235
|
+
atomic<bool> v_;
|
236
|
+
};
|
237
|
+
#endif
|
238
|
+
|
239
|
+
}
|
240
|
+
|
241
|
+
#endif
|