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
@@ -17,6 +17,7 @@ const int NANOSECONDS_PER_MILLISECOND = 1000000;
|
|
17
17
|
const int MICROSECONDS_PER_SECOND = 1000000;
|
18
18
|
const int NANOSECONDS_PER_MICROSECOND = 1000;
|
19
19
|
|
20
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
20
21
|
inline void to_time(int milliseconds, boost::xtime& xt)
|
21
22
|
{
|
22
23
|
int res = 0;
|
@@ -33,7 +34,9 @@ inline void to_time(int milliseconds, boost::xtime& xt)
|
|
33
34
|
xt.nsec -= NANOSECONDS_PER_SECOND;
|
34
35
|
}
|
35
36
|
}
|
37
|
+
#endif
|
36
38
|
#if defined(BOOST_HAS_PTHREADS)
|
39
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
37
40
|
inline void to_timespec(const boost::xtime& xt, timespec& ts)
|
38
41
|
{
|
39
42
|
ts.tv_sec = static_cast<int>(xt.sec);
|
@@ -44,14 +47,27 @@ inline void to_timespec(const boost::xtime& xt, timespec& ts)
|
|
44
47
|
ts.tv_nsec %= NANOSECONDS_PER_SECOND;
|
45
48
|
}
|
46
49
|
}
|
47
|
-
|
50
|
+
#endif
|
48
51
|
inline void to_time(int milliseconds, timespec& ts)
|
49
52
|
{
|
53
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
50
54
|
boost::xtime xt;
|
51
55
|
to_time(milliseconds, xt);
|
52
56
|
to_timespec(xt, ts);
|
57
|
+
#else
|
58
|
+
ts.tv_sec += (milliseconds / MILLISECONDS_PER_SECOND);
|
59
|
+
ts.tv_nsec += ((milliseconds % MILLISECONDS_PER_SECOND) *
|
60
|
+
NANOSECONDS_PER_MILLISECOND);
|
61
|
+
|
62
|
+
if (ts.tv_nsec >= NANOSECONDS_PER_SECOND)
|
63
|
+
{
|
64
|
+
++ts.tv_sec;
|
65
|
+
ts.tv_nsec -= NANOSECONDS_PER_SECOND;
|
66
|
+
}
|
67
|
+
#endif
|
53
68
|
}
|
54
69
|
|
70
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
55
71
|
inline void to_timespec_duration(const boost::xtime& xt, timespec& ts)
|
56
72
|
{
|
57
73
|
boost::xtime cur;
|
@@ -82,7 +98,9 @@ inline void to_timespec_duration(const boost::xtime& xt, timespec& ts)
|
|
82
98
|
}
|
83
99
|
}
|
84
100
|
#endif
|
101
|
+
#endif
|
85
102
|
|
103
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
86
104
|
inline void to_duration(boost::xtime xt, int& milliseconds)
|
87
105
|
{
|
88
106
|
boost::xtime cur;
|
@@ -126,6 +144,7 @@ inline void to_microduration(boost::xtime xt, int& microseconds)
|
|
126
144
|
NANOSECONDS_PER_MICROSECOND);
|
127
145
|
}
|
128
146
|
}
|
147
|
+
#endif
|
129
148
|
}
|
130
149
|
|
131
150
|
// Change Log:
|
data/ext/boost/limits.hpp
CHANGED
@@ -813,6 +813,16 @@ struct precision
|
|
813
813
|
|
814
814
|
#endif
|
815
815
|
|
816
|
+
#ifdef BOOST_MATH_USE_FLOAT128
|
817
|
+
|
818
|
+
template <class Policy>
|
819
|
+
struct precision<__float128, Policy>
|
820
|
+
{
|
821
|
+
typedef mpl::int_<113> type;
|
822
|
+
};
|
823
|
+
|
824
|
+
#endif
|
825
|
+
|
816
826
|
namespace detail{
|
817
827
|
|
818
828
|
template <class T, class Policy>
|
@@ -9,6 +9,7 @@
|
|
9
9
|
#define BOOST_MATH_SPECIAL_ROUND_FWD_HPP
|
10
10
|
|
11
11
|
#include <boost/config.hpp>
|
12
|
+
#include <boost/math/tools/promotion.hpp>
|
12
13
|
|
13
14
|
#ifdef _MSC_VER
|
14
15
|
#pragma once
|
@@ -20,9 +21,9 @@ namespace boost
|
|
20
21
|
{
|
21
22
|
|
22
23
|
template <class T, class Policy>
|
23
|
-
T trunc(const T& v, const Policy& pol);
|
24
|
+
typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol);
|
24
25
|
template <class T>
|
25
|
-
T trunc(const T& v);
|
26
|
+
typename tools::promote_args<T>::type trunc(const T& v);
|
26
27
|
template <class T, class Policy>
|
27
28
|
int itrunc(const T& v, const Policy& pol);
|
28
29
|
template <class T>
|
@@ -38,9 +39,9 @@ namespace boost
|
|
38
39
|
boost::long_long_type lltrunc(const T& v);
|
39
40
|
#endif
|
40
41
|
template <class T, class Policy>
|
41
|
-
T round(const T& v, const Policy& pol);
|
42
|
+
typename tools::promote_args<T>::type round(const T& v, const Policy& pol);
|
42
43
|
template <class T>
|
43
|
-
T round(const T& v);
|
44
|
+
typename tools::promote_args<T>::type round(const T& v);
|
44
45
|
template <class T, class Policy>
|
45
46
|
int iround(const T& v, const Policy& pol);
|
46
47
|
template <class T>
|
@@ -76,5 +77,17 @@ namespace boost
|
|
76
77
|
|
77
78
|
}
|
78
79
|
}
|
80
|
+
|
81
|
+
#undef BOOST_MATH_STD_USING
|
82
|
+
#define BOOST_MATH_STD_USING BOOST_MATH_STD_USING_CORE\
|
83
|
+
using boost::math::round;\
|
84
|
+
using boost::math::iround;\
|
85
|
+
using boost::math::lround;\
|
86
|
+
using boost::math::trunc;\
|
87
|
+
using boost::math::itrunc;\
|
88
|
+
using boost::math::ltrunc;\
|
89
|
+
using boost::math::modf;
|
90
|
+
|
91
|
+
|
79
92
|
#endif // BOOST_MATH_SPECIAL_ROUND_FWD_HPP
|
80
93
|
|
@@ -37,13 +37,13 @@ the template is never instantiated.
|
|
37
37
|
a floating point type (float, double or long double) can be determined
|
38
38
|
at compile time, then the following algorithm is used:
|
39
39
|
|
40
|
-
If all exponent bits, the flag bit (if there is one),
|
40
|
+
If all exponent bits, the flag bit (if there is one),
|
41
41
|
and all significand bits are 0, then the number is zero.
|
42
42
|
|
43
|
-
If all exponent bits and the flag bit (if there is one) are 0,
|
43
|
+
If all exponent bits and the flag bit (if there is one) are 0,
|
44
44
|
and at least one significand bit is 1, then the number is subnormal.
|
45
45
|
|
46
|
-
If all exponent bits are 1 and all significand bits are 0,
|
46
|
+
If all exponent bits are 1 and all significand bits are 0,
|
47
47
|
then the number is infinity.
|
48
48
|
|
49
49
|
If all exponent bits are 1 and at least one significand bit is 1,
|
@@ -56,7 +56,7 @@ at compile time, then the following algorithm is used:
|
|
56
56
|
|
57
57
|
Most formats have the structure
|
58
58
|
sign bit + exponent bits + significand bits.
|
59
|
-
|
59
|
+
|
60
60
|
A few have the structure
|
61
61
|
sign bit + exponent bits + flag bit + significand bits.
|
62
62
|
The flag bit is 0 for zero and subnormal numbers,
|
@@ -85,7 +85,7 @@ is used.
|
|
85
85
|
namespace std{ using ::abs; using ::fabs; }
|
86
86
|
#endif
|
87
87
|
|
88
|
-
namespace boost{
|
88
|
+
namespace boost{
|
89
89
|
|
90
90
|
//
|
91
91
|
// This must not be located in any namespace under boost::math
|
@@ -94,18 +94,28 @@ namespace boost{
|
|
94
94
|
//
|
95
95
|
namespace math_detail{
|
96
96
|
|
97
|
+
#ifdef BOOST_MSVC
|
98
|
+
#pragma warning(push)
|
99
|
+
#pragma warning(disable:4800)
|
100
|
+
#endif
|
101
|
+
|
97
102
|
template <class T>
|
98
103
|
inline bool is_nan_helper(T t, const boost::true_type&)
|
99
104
|
{
|
100
105
|
#ifdef isnan
|
101
106
|
return isnan(t);
|
102
107
|
#elif defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) || !defined(BOOST_HAS_FPCLASSIFY)
|
108
|
+
(void)t;
|
103
109
|
return false;
|
104
110
|
#else // BOOST_HAS_FPCLASSIFY
|
105
111
|
return (BOOST_FPCLASSIFY_PREFIX fpclassify(t) == (int)FP_NAN);
|
106
112
|
#endif
|
107
113
|
}
|
108
114
|
|
115
|
+
#ifdef BOOST_MSVC
|
116
|
+
#pragma warning(pop)
|
117
|
+
#endif
|
118
|
+
|
109
119
|
template <class T>
|
110
120
|
inline bool is_nan_helper(T, const boost::false_type&)
|
111
121
|
{
|
@@ -169,7 +179,7 @@ inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<false>&)
|
|
169
179
|
if(std::numeric_limits<T>::is_specialized)
|
170
180
|
return fpclassify_imp(t, generic_tag<true>());
|
171
181
|
#endif
|
172
|
-
//
|
182
|
+
//
|
173
183
|
// An unknown type with no numeric_limits support,
|
174
184
|
// so what are we supposed to do we do here?
|
175
185
|
//
|
@@ -178,7 +188,7 @@ inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<false>&)
|
|
178
188
|
return t == 0 ? FP_ZERO : FP_NORMAL;
|
179
189
|
}
|
180
190
|
|
181
|
-
template<class T>
|
191
|
+
template<class T>
|
182
192
|
int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag)
|
183
193
|
{
|
184
194
|
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
|
@@ -207,7 +217,7 @@ int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag)
|
|
207
217
|
return FP_NAN;
|
208
218
|
}
|
209
219
|
|
210
|
-
template<class T>
|
220
|
+
template<class T>
|
211
221
|
int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
|
212
222
|
{
|
213
223
|
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
|
@@ -215,7 +225,7 @@ int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
|
|
215
225
|
BOOST_MATH_INSTRUMENT_VARIABLE(x);
|
216
226
|
|
217
227
|
BOOST_DEDUCED_TYPENAME traits::bits a;
|
218
|
-
traits::get_bits(x,a);
|
228
|
+
traits::get_bits(x,a);
|
219
229
|
a &= traits::exponent | traits::flag | traits::significand;
|
220
230
|
|
221
231
|
if(a <= traits::significand) {
|
@@ -234,9 +244,8 @@ int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
|
|
234
244
|
return FP_NAN;
|
235
245
|
}
|
236
246
|
|
237
|
-
#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
|
238
|
-
|
239
|
-
inline int fpclassify_imp<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
247
|
+
#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && (defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) || defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS))
|
248
|
+
inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
240
249
|
{
|
241
250
|
return boost::math::detail::fpclassify_imp(t, generic_tag<true>());
|
242
251
|
}
|
@@ -259,24 +268,41 @@ inline int fpclassify BOOST_NO_MACRO_EXPAND(T t)
|
|
259
268
|
#endif
|
260
269
|
}
|
261
270
|
|
271
|
+
#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
|
272
|
+
template <>
|
273
|
+
inline int fpclassify<long double> BOOST_NO_MACRO_EXPAND(long double t)
|
274
|
+
{
|
275
|
+
typedef detail::fp_traits<long double>::type traits;
|
276
|
+
typedef traits::method method;
|
277
|
+
typedef long double value_type;
|
278
|
+
#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
279
|
+
if(std::numeric_limits<long double>::is_specialized && detail::is_generic_tag_false(static_cast<method*>(0)))
|
280
|
+
return detail::fpclassify_imp(static_cast<value_type>(t), detail::generic_tag<true>());
|
281
|
+
return detail::fpclassify_imp(static_cast<value_type>(t), method());
|
282
|
+
#else
|
283
|
+
return detail::fpclassify_imp(static_cast<value_type>(t), method());
|
284
|
+
#endif
|
285
|
+
}
|
286
|
+
#endif
|
287
|
+
|
262
288
|
namespace detail {
|
263
289
|
|
264
290
|
#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
|
265
|
-
template<class T>
|
291
|
+
template<class T>
|
266
292
|
inline bool isfinite_impl(T x, native_tag const&)
|
267
293
|
{
|
268
294
|
return (std::isfinite)(x);
|
269
295
|
}
|
270
296
|
#endif
|
271
297
|
|
272
|
-
template<class T>
|
298
|
+
template<class T>
|
273
299
|
inline bool isfinite_impl(T x, generic_tag<true> const&)
|
274
300
|
{
|
275
301
|
return x >= -(std::numeric_limits<T>::max)()
|
276
302
|
&& x <= (std::numeric_limits<T>::max)();
|
277
303
|
}
|
278
304
|
|
279
|
-
template<class T>
|
305
|
+
template<class T>
|
280
306
|
inline bool isfinite_impl(T x, generic_tag<false> const&)
|
281
307
|
{
|
282
308
|
#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
@@ -287,7 +313,7 @@ namespace detail {
|
|
287
313
|
return true;
|
288
314
|
}
|
289
315
|
|
290
|
-
template<class T>
|
316
|
+
template<class T>
|
291
317
|
inline bool isfinite_impl(T x, ieee_tag const&)
|
292
318
|
{
|
293
319
|
typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
|
@@ -298,8 +324,7 @@ namespace detail {
|
|
298
324
|
}
|
299
325
|
|
300
326
|
#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
|
301
|
-
|
302
|
-
inline bool isfinite_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
327
|
+
inline bool isfinite_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
303
328
|
{
|
304
329
|
return boost::math::detail::isfinite_impl(t, generic_tag<true>());
|
305
330
|
}
|
@@ -307,29 +332,41 @@ inline bool isfinite_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, cons
|
|
307
332
|
|
308
333
|
}
|
309
334
|
|
310
|
-
template<class T>
|
335
|
+
template<class T>
|
311
336
|
inline bool (isfinite)(T x)
|
312
337
|
{ //!< \brief return true if floating-point type t is finite.
|
313
338
|
typedef typename detail::fp_traits<T>::type traits;
|
314
339
|
typedef typename traits::method method;
|
315
|
-
typedef typename boost::is_floating_point<T>::type fp_tag;
|
340
|
+
// typedef typename boost::is_floating_point<T>::type fp_tag;
|
316
341
|
typedef typename tools::promote_args<T>::type value_type;
|
317
342
|
return detail::isfinite_impl(static_cast<value_type>(x), method());
|
318
343
|
}
|
319
344
|
|
345
|
+
#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
|
346
|
+
template<>
|
347
|
+
inline bool (isfinite)(long double x)
|
348
|
+
{ //!< \brief return true if floating-point type t is finite.
|
349
|
+
typedef detail::fp_traits<long double>::type traits;
|
350
|
+
typedef traits::method method;
|
351
|
+
typedef boost::is_floating_point<long double>::type fp_tag;
|
352
|
+
typedef long double value_type;
|
353
|
+
return detail::isfinite_impl(static_cast<value_type>(x), method());
|
354
|
+
}
|
355
|
+
#endif
|
356
|
+
|
320
357
|
//------------------------------------------------------------------------------
|
321
358
|
|
322
359
|
namespace detail {
|
323
360
|
|
324
361
|
#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
|
325
|
-
template<class T>
|
362
|
+
template<class T>
|
326
363
|
inline bool isnormal_impl(T x, native_tag const&)
|
327
364
|
{
|
328
365
|
return (std::isnormal)(x);
|
329
366
|
}
|
330
367
|
#endif
|
331
368
|
|
332
|
-
template<class T>
|
369
|
+
template<class T>
|
333
370
|
inline bool isnormal_impl(T x, generic_tag<true> const&)
|
334
371
|
{
|
335
372
|
if(x < 0) x = -x;
|
@@ -337,7 +374,7 @@ namespace detail {
|
|
337
374
|
&& x <= (std::numeric_limits<T>::max)();
|
338
375
|
}
|
339
376
|
|
340
|
-
template<class T>
|
377
|
+
template<class T>
|
341
378
|
inline bool isnormal_impl(T x, generic_tag<false> const&)
|
342
379
|
{
|
343
380
|
#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
@@ -347,7 +384,7 @@ namespace detail {
|
|
347
384
|
return !(x == 0);
|
348
385
|
}
|
349
386
|
|
350
|
-
template<class T>
|
387
|
+
template<class T>
|
351
388
|
inline bool isnormal_impl(T x, ieee_tag const&)
|
352
389
|
{
|
353
390
|
typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
|
@@ -358,8 +395,7 @@ namespace detail {
|
|
358
395
|
}
|
359
396
|
|
360
397
|
#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
|
361
|
-
|
362
|
-
inline bool isnormal_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
398
|
+
inline bool isnormal_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
363
399
|
{
|
364
400
|
return boost::math::detail::isnormal_impl(t, generic_tag<true>());
|
365
401
|
}
|
@@ -367,38 +403,50 @@ inline bool isnormal_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, cons
|
|
367
403
|
|
368
404
|
}
|
369
405
|
|
370
|
-
template<class T>
|
406
|
+
template<class T>
|
371
407
|
inline bool (isnormal)(T x)
|
372
408
|
{
|
373
409
|
typedef typename detail::fp_traits<T>::type traits;
|
374
410
|
typedef typename traits::method method;
|
375
|
-
typedef typename boost::is_floating_point<T>::type fp_tag;
|
411
|
+
//typedef typename boost::is_floating_point<T>::type fp_tag;
|
376
412
|
typedef typename tools::promote_args<T>::type value_type;
|
377
413
|
return detail::isnormal_impl(static_cast<value_type>(x), method());
|
378
414
|
}
|
379
415
|
|
416
|
+
#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
|
417
|
+
template<>
|
418
|
+
inline bool (isnormal)(long double x)
|
419
|
+
{
|
420
|
+
typedef detail::fp_traits<long double>::type traits;
|
421
|
+
typedef traits::method method;
|
422
|
+
typedef boost::is_floating_point<long double>::type fp_tag;
|
423
|
+
typedef long double value_type;
|
424
|
+
return detail::isnormal_impl(static_cast<value_type>(x), method());
|
425
|
+
}
|
426
|
+
#endif
|
427
|
+
|
380
428
|
//------------------------------------------------------------------------------
|
381
429
|
|
382
430
|
namespace detail {
|
383
431
|
|
384
432
|
#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
|
385
|
-
template<class T>
|
433
|
+
template<class T>
|
386
434
|
inline bool isinf_impl(T x, native_tag const&)
|
387
435
|
{
|
388
436
|
return (std::isinf)(x);
|
389
437
|
}
|
390
438
|
#endif
|
391
439
|
|
392
|
-
template<class T>
|
440
|
+
template<class T>
|
393
441
|
inline bool isinf_impl(T x, generic_tag<true> const&)
|
394
442
|
{
|
395
443
|
(void)x; // in case the compiler thinks that x is unused because std::numeric_limits<T>::has_infinity is false
|
396
|
-
return std::numeric_limits<T>::has_infinity
|
444
|
+
return std::numeric_limits<T>::has_infinity
|
397
445
|
&& ( x == std::numeric_limits<T>::infinity()
|
398
446
|
|| x == -std::numeric_limits<T>::infinity());
|
399
447
|
}
|
400
448
|
|
401
|
-
template<class T>
|
449
|
+
template<class T>
|
402
450
|
inline bool isinf_impl(T x, generic_tag<false> const&)
|
403
451
|
{
|
404
452
|
#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
@@ -409,7 +457,7 @@ namespace detail {
|
|
409
457
|
return false;
|
410
458
|
}
|
411
459
|
|
412
|
-
template<class T>
|
460
|
+
template<class T>
|
413
461
|
inline bool isinf_impl(T x, ieee_copy_all_bits_tag const&)
|
414
462
|
{
|
415
463
|
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
|
@@ -420,7 +468,7 @@ namespace detail {
|
|
420
468
|
return a == traits::exponent;
|
421
469
|
}
|
422
470
|
|
423
|
-
template<class T>
|
471
|
+
template<class T>
|
424
472
|
inline bool isinf_impl(T x, ieee_copy_leading_bits_tag const&)
|
425
473
|
{
|
426
474
|
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
|
@@ -436,8 +484,7 @@ namespace detail {
|
|
436
484
|
}
|
437
485
|
|
438
486
|
#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
|
439
|
-
|
440
|
-
inline bool isinf_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
487
|
+
inline bool isinf_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
|
441
488
|
{
|
442
489
|
return boost::math::detail::isinf_impl(t, generic_tag<true>());
|
443
490
|
}
|
@@ -445,29 +492,41 @@ inline bool isinf_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const n
|
|
445
492
|
|
446
493
|
} // namespace detail
|
447
494
|
|
448
|
-
template<class T>
|
495
|
+
template<class T>
|
449
496
|
inline bool (isinf)(T x)
|
450
497
|
{
|
451
498
|
typedef typename detail::fp_traits<T>::type traits;
|
452
499
|
typedef typename traits::method method;
|
453
|
-
typedef typename boost::is_floating_point<T>::type fp_tag;
|
500
|
+
// typedef typename boost::is_floating_point<T>::type fp_tag;
|
454
501
|
typedef typename tools::promote_args<T>::type value_type;
|
455
502
|
return detail::isinf_impl(static_cast<value_type>(x), method());
|
456
503
|
}
|
457
504
|
|
505
|
+
#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
|
506
|
+
template<>
|
507
|
+
inline bool (isinf)(long double x)
|
508
|
+
{
|
509
|
+
typedef detail::fp_traits<long double>::type traits;
|
510
|
+
typedef traits::method method;
|
511
|
+
typedef boost::is_floating_point<long double>::type fp_tag;
|
512
|
+
typedef long double value_type;
|
513
|
+
return detail::isinf_impl(static_cast<value_type>(x), method());
|
514
|
+
}
|
515
|
+
#endif
|
516
|
+
|
458
517
|
//------------------------------------------------------------------------------
|
459
518
|
|
460
519
|
namespace detail {
|
461
520
|
|
462
521
|
#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
|
463
|
-
template<class T>
|
522
|
+
template<class T>
|
464
523
|
inline bool isnan_impl(T x, native_tag const&)
|
465
524
|
{
|
466
525
|
return (std::isnan)(x);
|
467
526
|
}
|
468
527
|
#endif
|
469
528
|
|
470
|
-
template<class T>
|
529
|
+
template<class T>
|
471
530
|
inline bool isnan_impl(T x, generic_tag<true> const&)
|
472
531
|
{
|
473
532
|
return std::numeric_limits<T>::has_infinity
|
@@ -475,7 +534,7 @@ namespace detail {
|
|
475
534
|
: x != x;
|
476
535
|
}
|
477
536
|
|
478
|
-
template<class T>
|
537
|
+
template<class T>
|
479
538
|
inline bool isnan_impl(T x, generic_tag<false> const&)
|
480
539
|
{
|
481
540
|
#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
@@ -486,7 +545,7 @@ namespace detail {
|
|
486
545
|
return false;
|
487
546
|
}
|
488
547
|
|
489
|
-
template<class T>
|
548
|
+
template<class T>
|
490
549
|
inline bool isnan_impl(T x, ieee_copy_all_bits_tag const&)
|
491
550
|
{
|
492
551
|
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
|
@@ -497,7 +556,7 @@ namespace detail {
|
|
497
556
|
return a > traits::exponent;
|
498
557
|
}
|
499
558
|
|
500
|
-
template<class T>
|
559
|
+
template<class T>
|
501
560
|
inline bool isnan_impl(T x, ieee_copy_leading_bits_tag const&)
|
502
561
|
{
|
503
562
|
typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
|
@@ -516,11 +575,12 @@ namespace detail {
|
|
516
575
|
|
517
576
|
} // namespace detail
|
518
577
|
|
519
|
-
template<class T>
|
578
|
+
template<class T>
|
579
|
+
inline bool (isnan)(T x)
|
520
580
|
{ //!< \brief return true if floating-point type t is NaN (Not A Number).
|
521
581
|
typedef typename detail::fp_traits<T>::type traits;
|
522
582
|
typedef typename traits::method method;
|
523
|
-
typedef typename boost::is_floating_point<T>::type fp_tag;
|
583
|
+
// typedef typename boost::is_floating_point<T>::type fp_tag;
|
524
584
|
return detail::isnan_impl(x, method());
|
525
585
|
}
|
526
586
|
|
@@ -528,6 +588,15 @@ template<class T> bool (isnan)(T x)
|
|
528
588
|
template <> inline bool isnan BOOST_NO_MACRO_EXPAND<float>(float t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }
|
529
589
|
template <> inline bool isnan BOOST_NO_MACRO_EXPAND<double>(double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }
|
530
590
|
template <> inline bool isnan BOOST_NO_MACRO_EXPAND<long double>(long double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }
|
591
|
+
#elif defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
|
592
|
+
template<>
|
593
|
+
inline bool (isnan)(long double x)
|
594
|
+
{ //!< \brief return true if floating-point type t is NaN (Not A Number).
|
595
|
+
typedef detail::fp_traits<long double>::type traits;
|
596
|
+
typedef traits::method method;
|
597
|
+
typedef boost::is_floating_point<long double>::type fp_tag;
|
598
|
+
return detail::isnan_impl(x, method());
|
599
|
+
}
|
531
600
|
#endif
|
532
601
|
|
533
602
|
} // namespace math
|