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
@@ -20,7 +20,7 @@
|
|
20
20
|
# define BOOST_NO_TYPEID
|
21
21
|
#endif
|
22
22
|
|
23
|
-
#if defined(__int64)
|
23
|
+
#if defined(__int64) && !defined(__GNUC__)
|
24
24
|
# define BOOST_HAS_MS_INT64
|
25
25
|
#endif
|
26
26
|
|
@@ -29,6 +29,25 @@
|
|
29
29
|
// Clang supports "long long" in all compilation modes.
|
30
30
|
#define BOOST_HAS_LONG_LONG
|
31
31
|
|
32
|
+
//
|
33
|
+
// Dynamic shared object (DSO) and dynamic-link library (DLL) support
|
34
|
+
//
|
35
|
+
#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)
|
36
|
+
# define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
|
37
|
+
# define BOOST_SYMBOL_IMPORT
|
38
|
+
# define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
|
39
|
+
#endif
|
40
|
+
|
41
|
+
//
|
42
|
+
// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
|
43
|
+
// between switch labels.
|
44
|
+
//
|
45
|
+
#if __cplusplus >= 201103L && defined(__has_warning)
|
46
|
+
# if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
|
47
|
+
# define BOOST_FALLTHROUGH [[clang::fallthrough]]
|
48
|
+
# endif
|
49
|
+
#endif
|
50
|
+
|
32
51
|
#if !__has_feature(cxx_auto_type)
|
33
52
|
# define BOOST_NO_CXX11_AUTO_DECLARATIONS
|
34
53
|
# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
|
@@ -123,6 +142,10 @@
|
|
123
142
|
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
124
143
|
#endif
|
125
144
|
|
145
|
+
#if !__has_feature(cxx_user_literals)
|
146
|
+
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
147
|
+
#endif
|
148
|
+
|
126
149
|
// Clang always supports variadic macros
|
127
150
|
// Clang always supports extern templates
|
128
151
|
|
@@ -95,6 +95,7 @@
|
|
95
95
|
#define BOOST_NO_CXX11_UNICODE_LITERALS
|
96
96
|
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
97
97
|
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
98
|
+
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
98
99
|
|
99
100
|
#ifdef c_plusplus
|
100
101
|
// EDG has "long long" in non-strict mode
|
@@ -51,6 +51,7 @@
|
|
51
51
|
#define BOOST_NO_CXX11_DECLTYPE_N3276
|
52
52
|
#define BOOST_NO_CXX11_DECLTYPE
|
53
53
|
#define BOOST_NO_CXX11_CONSTEXPR
|
54
|
+
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
54
55
|
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
55
56
|
#define BOOST_NO_CXX11_CHAR32_T
|
56
57
|
#define BOOST_NO_CXX11_CHAR16_T
|
@@ -11,7 +11,14 @@
|
|
11
11
|
|
12
12
|
// See http://www.boost.org for most recent version.
|
13
13
|
|
14
|
-
// GNU C++ compiler setup
|
14
|
+
// GNU C++ compiler setup.
|
15
|
+
|
16
|
+
//
|
17
|
+
// Define BOOST_GCC so we know this is "real" GCC and not some pretender:
|
18
|
+
//
|
19
|
+
#if !defined(__CUDACC__)
|
20
|
+
#define BOOST_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
21
|
+
#endif
|
15
22
|
|
16
23
|
#if __GNUC__ < 3
|
17
24
|
# if __GNUC_MINOR__ == 91
|
@@ -146,6 +153,19 @@
|
|
146
153
|
# endif
|
147
154
|
#endif
|
148
155
|
|
156
|
+
//
|
157
|
+
// Recent GCC versions have __int128 when in 64-bit mode.
|
158
|
+
//
|
159
|
+
// We disable this if the compiler is really nvcc as it
|
160
|
+
// doesn't actually support __int128 as of CUDA_VERSION=5000
|
161
|
+
// even though it defines __SIZEOF_INT128__.
|
162
|
+
// See https://svn.boost.org/trac/boost/ticket/8048
|
163
|
+
// Only re-enable this for nvcc if you're absolutely sure
|
164
|
+
// of the circumstances under which it's supported:
|
165
|
+
//
|
166
|
+
#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
|
167
|
+
# define BOOST_HAS_INT128
|
168
|
+
#endif
|
149
169
|
|
150
170
|
// C++0x features in 4.3.n and later
|
151
171
|
//
|
@@ -216,12 +236,18 @@
|
|
216
236
|
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
217
237
|
#endif
|
218
238
|
|
239
|
+
// C++0x features in 4.7.n and later
|
240
|
+
//
|
219
241
|
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
220
242
|
# define BOOST_NO_CXX11_TEMPLATE_ALIASES
|
243
|
+
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
221
244
|
#endif
|
222
|
-
|
245
|
+
|
246
|
+
// C++0x features in 4.8.1 and later
|
223
247
|
//
|
224
|
-
#
|
248
|
+
#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40801) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
249
|
+
# define BOOST_NO_CXX11_DECLTYPE_N3276
|
250
|
+
#endif
|
225
251
|
|
226
252
|
#ifndef BOOST_COMPILER
|
227
253
|
# define BOOST_COMPILER "GNU C++ version " __VERSION__
|
@@ -53,7 +53,8 @@
|
|
53
53
|
# define BOOST_NO_CXX11_RAW_LITERALS
|
54
54
|
# define BOOST_NO_CXX11_UNICODE_LITERALS
|
55
55
|
# define BOOST_NO_CXX11_NOEXCEPT
|
56
|
-
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
56
|
+
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
57
|
+
# define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
57
58
|
|
58
59
|
#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__
|
59
60
|
|
@@ -118,6 +118,7 @@
|
|
118
118
|
#define BOOST_NO_CXX11_TEMPLATE_ALIASES
|
119
119
|
#define BOOST_NO_CXX11_UNICODE_LITERALS
|
120
120
|
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
121
|
+
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
121
122
|
|
122
123
|
/*
|
123
124
|
See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and
|
@@ -181,7 +181,7 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
|
|
181
181
|
// (Niels Dekker, LKEB, May 2010)
|
182
182
|
// Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression).
|
183
183
|
#if defined(__INTEL_COMPILER)
|
184
|
-
# if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999)
|
184
|
+
# if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999) || (defined(_WIN32) && (__INTEL_COMPILER < 1500))
|
185
185
|
# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
186
186
|
# endif
|
187
187
|
#endif
|
@@ -119,6 +119,7 @@
|
|
119
119
|
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
120
120
|
#define BOOST_NO_CXX11_VARIADIC_MACROS
|
121
121
|
#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
122
|
+
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
122
123
|
|
123
124
|
#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
|
124
125
|
|
@@ -53,8 +53,8 @@
|
|
53
53
|
#error "Compiler not supported or configured - please reconfigure"
|
54
54
|
#endif
|
55
55
|
//
|
56
|
-
// last known and checked version is
|
57
|
-
#if (__IBMCPP__ >
|
56
|
+
// last known and checked version is 1210:
|
57
|
+
#if (__IBMCPP__ > 1210)
|
58
58
|
# if defined(BOOST_ASSERT_CONFIG)
|
59
59
|
# error "Unknown compiler version - please run the configure tests and report the results"
|
60
60
|
# endif
|
@@ -106,6 +106,7 @@
|
|
106
106
|
#define BOOST_NO_CXX11_NULLPTR
|
107
107
|
#define BOOST_NO_CXX11_RANGE_BASED_FOR
|
108
108
|
#define BOOST_NO_CXX11_RAW_LITERALS
|
109
|
+
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
109
110
|
#if ! __IBMCPP_RVALUE_REFERENCES
|
110
111
|
# define BOOST_NO_CXX11_RVALUE_REFERENCES
|
111
112
|
#endif
|
@@ -134,10 +134,6 @@
|
|
134
134
|
// (Niels Dekker, LKEB, May 2010)
|
135
135
|
# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
136
136
|
|
137
|
-
#if _MSC_VER < 1600 || !defined(BOOST_STRICT_CONFIG) // 150X == VC++ 9.0
|
138
|
-
# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
|
139
|
-
#endif
|
140
|
-
|
141
137
|
#ifndef _NATIVE_WCHAR_T_DEFINED
|
142
138
|
# define BOOST_NO_INTRINSIC_WCHAR_T
|
143
139
|
#endif
|
@@ -183,6 +179,16 @@
|
|
183
179
|
# define BOOST_NO_RTTI
|
184
180
|
#endif
|
185
181
|
|
182
|
+
//
|
183
|
+
// TR1 features:
|
184
|
+
//
|
185
|
+
#if _MSC_VER >= 1700
|
186
|
+
// # define BOOST_HAS_TR1_HASH // don't know if this is true yet.
|
187
|
+
// # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet.
|
188
|
+
# define BOOST_HAS_TR1_UNORDERED_MAP
|
189
|
+
# define BOOST_HAS_TR1_UNORDERED_SET
|
190
|
+
#endif
|
191
|
+
|
186
192
|
//
|
187
193
|
// C++0x features
|
188
194
|
//
|
@@ -211,24 +217,32 @@
|
|
211
217
|
# define BOOST_NO_CXX11_SCOPED_ENUMS
|
212
218
|
#endif // _MSC_VER < 1700
|
213
219
|
|
214
|
-
// C++
|
220
|
+
// C++11 features supported by VC++ 11 (aka 2012) November 2012 CTP
|
221
|
+
// Because the CTP is unsupported, unrelease, and only alpha quality,
|
222
|
+
// it is only supported if BOOST_MSVC_ENABLE_2012_NOV_CTP is defined.
|
223
|
+
//
|
224
|
+
#if _MSC_FULL_VER < 170051025 || !defined(BOOST_MSVC_ENABLE_2012_NOV_CTP)
|
225
|
+
# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
226
|
+
# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
|
227
|
+
# define BOOST_NO_CXX11_RAW_LITERALS
|
228
|
+
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
229
|
+
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
|
230
|
+
#endif
|
231
|
+
|
232
|
+
// C++11 features not supported by any versions
|
215
233
|
#define BOOST_NO_CXX11_CHAR16_T
|
216
234
|
#define BOOST_NO_CXX11_CHAR32_T
|
217
235
|
#define BOOST_NO_CXX11_CONSTEXPR
|
218
236
|
#define BOOST_NO_CXX11_DECLTYPE_N3276
|
219
237
|
#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
220
238
|
#define BOOST_NO_CXX11_DELETED_FUNCTIONS
|
221
|
-
#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
222
|
-
#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
|
223
|
-
#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
|
224
239
|
#define BOOST_NO_CXX11_NOEXCEPT
|
225
|
-
#define BOOST_NO_CXX11_RAW_LITERALS
|
226
240
|
#define BOOST_NO_CXX11_TEMPLATE_ALIASES
|
227
241
|
#define BOOST_NO_CXX11_UNICODE_LITERALS
|
228
|
-
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
229
242
|
#define BOOST_NO_SFINAE_EXPR
|
230
243
|
#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
|
231
|
-
#define
|
244
|
+
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
245
|
+
|
232
246
|
//
|
233
247
|
// prefix and suffix headers:
|
234
248
|
//
|
@@ -1,31 +1,369 @@
|
|
1
|
-
// (C) Copyright Dustin Spicuzza 2009.
|
2
|
-
//
|
3
|
-
//
|
1
|
+
// (C) Copyright Dustin Spicuzza 2009.
|
2
|
+
// Adapted to vxWorks 6.9 by Peter Brockamp 2012.
|
3
|
+
// Use, modification and distribution are subject to the
|
4
|
+
// Boost Software License, Version 1.0. (See accompanying file
|
4
5
|
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
5
6
|
|
6
7
|
// See http://www.boost.org for most recent version.
|
7
8
|
|
8
|
-
//
|
9
|
+
// Since WRS does not yet properly support boost under vxWorks
|
10
|
+
// and this file was badly outdated, but I was keen on using it,
|
11
|
+
// I patched boost myself to make things work. This has been tested
|
12
|
+
// and adapted by me for vxWorks 6.9 *only*, as I'm lacking access
|
13
|
+
// to earlier 6.X versions! The only thing I know for sure is that
|
14
|
+
// very old versions of vxWorks (namely everything below 6.x) are
|
15
|
+
// absolutely unable to use boost. This is mainly due to the completely
|
16
|
+
// outdated libraries and ancient compiler (GCC 2.96 or worse). Do
|
17
|
+
// not even think of getting this to work, a miserable failure will
|
18
|
+
// be guaranteed!
|
19
|
+
// Equally, this file has been tested for RTPs (Real Time Processes)
|
20
|
+
// only, not for DKMs (Downloadable Kernel Modules). These two types
|
21
|
+
// of executables differ largely in the available functionality of
|
22
|
+
// the C-library, STL, and so on. A DKM uses a library similar to those
|
23
|
+
// of vxWorks 5.X - with all its limitations and incompatibilities
|
24
|
+
// with respect to ANSI C++ and STL. So probably there might be problems
|
25
|
+
// with the usage of boost from DKMs. WRS or any voluteers are free to
|
26
|
+
// prove the opposite!
|
9
27
|
|
28
|
+
// ====================================================================
|
29
|
+
//
|
30
|
+
// Some important information regarding the usage of POSIX semaphores:
|
31
|
+
// -------------------------------------------------------------------
|
32
|
+
//
|
33
|
+
// VxWorks as a real time operating system handles threads somewhat
|
34
|
+
// different from what "normal" OSes do, regarding their scheduling!
|
35
|
+
// This could lead to a scenario called "priority inversion" when using
|
36
|
+
// semaphores, see http://en.wikipedia.org/wiki/Priority_inversion.
|
37
|
+
//
|
38
|
+
// Now, VxWorks POSIX-semaphores for DKM's default to the usage of
|
39
|
+
// priority inverting semaphores, which is fine. On the other hand,
|
40
|
+
// for RTP's it defaults to using non priority inverting semaphores,
|
41
|
+
// which could easily pose a serious problem for a real time process,
|
42
|
+
// i.e. deadlocks! To overcome this two possibilities do exist:
|
43
|
+
//
|
44
|
+
// a) Patch every piece of boost that uses semaphores to instanciate
|
45
|
+
// the proper type of semaphores. This is non-intrusive with respect
|
46
|
+
// to the OS and could relatively easy been done by giving all
|
47
|
+
// semaphores attributes deviating from the default (for in-depth
|
48
|
+
// information see the POSIX functions pthread_mutexattr_init()
|
49
|
+
// and pthread_mutexattr_setprotocol()). However this breaks all
|
50
|
+
// too easily, as with every new version some boost library could
|
51
|
+
// all in a sudden start using semaphores, resurrecting the very
|
52
|
+
// same, hard to locate problem over and over again!
|
53
|
+
//
|
54
|
+
// b) We could change the default properties for POSIX-semaphores
|
55
|
+
// that VxWorks uses for RTP's and this is being suggested here,
|
56
|
+
// as it will more or less seamlessly integrate with boost. I got
|
57
|
+
// the following information from WRS how to do this, compare
|
58
|
+
// Wind River TSR# 1209768:
|
59
|
+
//
|
60
|
+
// Instructions for changing the default properties of POSIX-
|
61
|
+
// semaphores for RTP's in VxWorks 6.9:
|
62
|
+
// - Edit the file /vxworks-6.9/target/usr/src/posix/pthreadLib.c
|
63
|
+
// in the root of your Workbench-installation.
|
64
|
+
// - Around line 917 there should be the definition of the default
|
65
|
+
// mutex attributes:
|
66
|
+
//
|
67
|
+
// LOCAL pthread_mutexattr_t defaultMutexAttr =
|
68
|
+
// {
|
69
|
+
// PTHREAD_INITIALIZED_OBJ, PTHREAD_PRIO_NONE, 0,
|
70
|
+
// PTHREAD_MUTEX_DEFAULT
|
71
|
+
// };
|
72
|
+
//
|
73
|
+
// Here, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.
|
74
|
+
// - Around line 1236 there should be a definition for the function
|
75
|
+
// pthread_mutexattr_init(). A couple of lines below you should
|
76
|
+
// find a block of code like this:
|
77
|
+
//
|
78
|
+
// pAttr->mutexAttrStatus = PTHREAD_INITIALIZED_OBJ;
|
79
|
+
// pAttr->mutexAttrProtocol = PTHREAD_PRIO_NONE;
|
80
|
+
// pAttr->mutexAttrPrioceiling = 0;
|
81
|
+
// pAttr->mutexAttrType = PTHREAD_MUTEX_DEFAULT;
|
82
|
+
//
|
83
|
+
// Here again, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.
|
84
|
+
// - Finally, rebuild your VSB. This will create a new VxWorks kernel
|
85
|
+
// with the changed properties. That's it! Now, using boost should
|
86
|
+
// no longer cause any problems with task deadlocks!
|
87
|
+
//
|
88
|
+
// And here's another useful piece of information concerning VxWorks'
|
89
|
+
// POSIX-functionality in general:
|
90
|
+
// VxWorks is not a genuine POSIX-OS in itself, rather it is using a
|
91
|
+
// kind of compatibility layer (sort of a wrapper) to emulate the
|
92
|
+
// POSIX-functionality by using its own resources and functions.
|
93
|
+
// At the time a task (thread) calls it's first POSIX-function during
|
94
|
+
// runtime it is being transformed by the OS into a POSIX-thread.
|
95
|
+
// This transformation does include a call to malloc() to allocate the
|
96
|
+
// memory required for the housekeeping of POSIX-threads. In a high
|
97
|
+
// priority RTP this malloc() call may be highly undesirable, as its
|
98
|
+
// timing is more or less unpredictable (depending on what your actual
|
99
|
+
// heap looks like). You can circumvent this problem by calling the
|
100
|
+
// function thread_self() at a well defined point in the code of the
|
101
|
+
// task, e.g. shortly after the task spawns up. Thereby you are able
|
102
|
+
// to define the time when the task-transformation will take place and
|
103
|
+
// you could shift it to an uncritical point where a malloc() call is
|
104
|
+
// tolerable. So, if this could pose a problem for your code, remember
|
105
|
+
// to call thread_self() from the affected task at an early stage.
|
106
|
+
//
|
107
|
+
// ====================================================================
|
108
|
+
|
109
|
+
// Block out all versions before vxWorks 6.x, as these don't work:
|
110
|
+
// Include header with the vxWorks version information and query them
|
111
|
+
#include <version.h>
|
112
|
+
#if !defined(_WRS_VXWORKS_MAJOR) || (_WRS_VXWORKS_MAJOR < 6)
|
113
|
+
# error "The vxWorks version you're using is so badly outdated,\
|
114
|
+
it doesn't work at all with boost, sorry, no chance!"
|
115
|
+
#endif
|
116
|
+
|
117
|
+
// Handle versions above 5.X but below 6.9
|
118
|
+
#if (_WRS_VXWORKS_MAJOR == 6) && (_WRS_VXWORKS_MINOR < 9)
|
119
|
+
// TODO: Starting from what version does vxWorks work with boost?
|
120
|
+
// We can't reasonably insert a #warning "" as a user hint here,
|
121
|
+
// as this will show up with every file including some boost header,
|
122
|
+
// badly bugging the user... So for the time being we just leave it.
|
123
|
+
#endif
|
124
|
+
|
125
|
+
// vxWorks specific config options:
|
126
|
+
// --------------------------------
|
10
127
|
#define BOOST_PLATFORM "vxWorks"
|
11
128
|
|
12
|
-
|
13
|
-
#
|
129
|
+
// Special behaviour for DKMs:
|
130
|
+
#ifdef _WRS_KERNEL
|
131
|
+
// DKMs do not have the <cwchar>-header,
|
132
|
+
// but apparently they do have an intrinsic wchar_t meanwhile!
|
133
|
+
# define BOOST_NO_CWCHAR
|
14
134
|
|
15
|
-
|
16
|
-
#define
|
135
|
+
// Lots of wide-functions and -headers are unavailable for DKMs as well:
|
136
|
+
# define BOOST_NO_CWCTYPE
|
137
|
+
# define BOOST_NO_SWPRINTF
|
138
|
+
# define BOOST_NO_STD_WSTRING
|
139
|
+
# define BOOST_NO_STD_WSTREAMBUF
|
17
140
|
#endif
|
18
141
|
|
142
|
+
// Generally available headers:
|
19
143
|
#define BOOST_HAS_UNISTD_H
|
144
|
+
#define BOOST_HAS_STDINT_H
|
145
|
+
#define BOOST_HAS_DIRENT_H
|
146
|
+
#define BOOST_HAS_SLIST
|
147
|
+
|
148
|
+
// vxWorks does not have installed an iconv-library by default,
|
149
|
+
// so unfortunately no Unicode support from scratch is available!
|
150
|
+
// Thus, instead it is suggested to switch to ICU, as this seems
|
151
|
+
// to be the most complete and portable option...
|
152
|
+
#define BOOST_LOCALE_WITH_ICU
|
153
|
+
|
154
|
+
// Generally available functionality:
|
155
|
+
#define BOOST_HAS_THREADS
|
156
|
+
#define BOOST_HAS_NANOSLEEP
|
157
|
+
#define BOOST_HAS_GETTIMEOFDAY
|
158
|
+
#define BOOST_HAS_CLOCK_GETTIME
|
159
|
+
#define BOOST_HAS_MACRO_USE_FACET
|
160
|
+
|
161
|
+
// Generally unavailable functionality, delivered by boost's test function:
|
162
|
+
//#define BOOST_NO_DEDUCED_TYPENAME // Commented this out, boost's test gives an errorneous result!
|
163
|
+
#define BOOST_NO_CXX11_EXTERN_TEMPLATE
|
164
|
+
#define BOOST_NO_CXX11_VARIADIC_MACROS
|
165
|
+
|
166
|
+
// Generally available threading API's:
|
167
|
+
#define BOOST_HAS_PTHREADS
|
168
|
+
#define BOOST_HAS_SCHED_YIELD
|
169
|
+
#define BOOST_HAS_SIGACTION
|
170
|
+
|
171
|
+
// Functionality available for RTPs only:
|
172
|
+
#ifdef __RTP__
|
173
|
+
# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
|
174
|
+
# define BOOST_HAS_LOG1P
|
175
|
+
# define BOOST_HAS_EXPM1
|
176
|
+
#endif
|
20
177
|
|
21
|
-
//
|
22
|
-
|
23
|
-
|
24
|
-
#
|
178
|
+
// Functionality available for DKMs only:
|
179
|
+
#ifdef _WRS_KERNEL
|
180
|
+
// Luckily, at the moment there seems to be none!
|
181
|
+
#endif
|
25
182
|
|
26
|
-
//
|
183
|
+
// These #defines allow posix_features to work, since vxWorks doesn't
|
184
|
+
// #define them itself for DKMs (for RTPs on the contrary it does):
|
185
|
+
#ifdef _WRS_KERNEL
|
186
|
+
# ifndef _POSIX_TIMERS
|
187
|
+
# define _POSIX_TIMERS 1
|
188
|
+
# endif
|
189
|
+
# ifndef _POSIX_THREADS
|
190
|
+
# define _POSIX_THREADS 1
|
191
|
+
# endif
|
192
|
+
#endif
|
193
|
+
|
194
|
+
// vxWorks doesn't work with asio serial ports:
|
27
195
|
#define BOOST_ASIO_DISABLE_SERIAL_PORT
|
196
|
+
// TODO: The problem here seems to bee that vxWorks uses its own, very specific
|
197
|
+
// ways to handle serial ports, incompatible with POSIX or anything...
|
198
|
+
// Maybe a specific implementation would be possible, but until the
|
199
|
+
// straight need arises... This implementation would presumably consist
|
200
|
+
// of some vxWorks specific ioctl-calls, etc. Any voluteers?
|
201
|
+
|
202
|
+
// vxWorks-around: <time.h> #defines CLOCKS_PER_SEC as sysClkRateGet() but
|
203
|
+
// miserably fails to #include the required <sysLib.h> to make
|
204
|
+
// sysClkRateGet() available! So we manually include it here.
|
205
|
+
#ifdef __RTP__
|
206
|
+
# include <time.h>
|
207
|
+
# include <sysLib.h>
|
208
|
+
#endif
|
209
|
+
|
210
|
+
// vxWorks-around: In <stdint.h> the macros INT32_C(), UINT32_C(), INT64_C() and
|
211
|
+
// UINT64_C() are defined errorneously, yielding not a signed/
|
212
|
+
// unsigned long/long long type, but a signed/unsigned int/long
|
213
|
+
// type. Eventually this leads to compile errors in ratio_fwd.hpp,
|
214
|
+
// when trying to define several constants which do not fit into a
|
215
|
+
// long type! We correct them here by redefining.
|
216
|
+
#include <cstdint>
|
217
|
+
|
218
|
+
// Some macro-magic to do the job
|
219
|
+
#define VX_JOIN(X, Y) VX_DO_JOIN(X, Y)
|
220
|
+
#define VX_DO_JOIN(X, Y) VX_DO_JOIN2(X, Y)
|
221
|
+
#define VX_DO_JOIN2(X, Y) X##Y
|
222
|
+
|
223
|
+
// Correctly setup the macros
|
224
|
+
#undef INT32_C
|
225
|
+
#undef UINT32_C
|
226
|
+
#undef INT64_C
|
227
|
+
#undef UINT64_C
|
228
|
+
#define INT32_C(x) VX_JOIN(x, L)
|
229
|
+
#define UINT32_C(x) VX_JOIN(x, UL)
|
230
|
+
#define INT64_C(x) VX_JOIN(x, LL)
|
231
|
+
#define UINT64_C(x) VX_JOIN(x, ULL)
|
232
|
+
|
233
|
+
// #include Libraries required for the following function adaption
|
234
|
+
#include <ioLib.h>
|
235
|
+
#include <tickLib.h>
|
236
|
+
#include <sys/time.h>
|
28
237
|
|
29
|
-
//
|
238
|
+
// Use C-linkage for the following helper functions
|
239
|
+
extern "C" {
|
240
|
+
|
241
|
+
// vxWorks-around: The required functions getrlimit() and getrlimit() are missing.
|
242
|
+
// But we have the similar functions getprlimit() and setprlimit(),
|
243
|
+
// which may serve the purpose.
|
244
|
+
// Problem: The vxWorks-documentation regarding these functions
|
245
|
+
// doesn't deserve its name! It isn't documented what the first two
|
246
|
+
// parameters idtype and id mean, so we must fall back to an educated
|
247
|
+
// guess - null, argh... :-/
|
248
|
+
|
249
|
+
// TODO: getprlimit() and setprlimit() do exist for RTPs only, for whatever reason.
|
250
|
+
// Thus for DKMs there would have to be another implementation.
|
251
|
+
#ifdef __RTP__
|
252
|
+
inline int getrlimit(int resource, struct rlimit *rlp){
|
253
|
+
return getprlimit(0, 0, resource, rlp);
|
254
|
+
}
|
255
|
+
|
256
|
+
inline int setrlimit(int resource, const struct rlimit *rlp){
|
257
|
+
return setprlimit(0, 0, resource, const_cast<struct rlimit*>(rlp));
|
258
|
+
}
|
259
|
+
#endif
|
260
|
+
|
261
|
+
// vxWorks has ftruncate() only, so we do simulate truncate():
|
262
|
+
inline int truncate(const char *p, off_t l){
|
263
|
+
int fd = open(p, O_WRONLY);
|
264
|
+
if (fd == -1){
|
265
|
+
errno = EACCES;
|
266
|
+
return -1;
|
267
|
+
}
|
268
|
+
if (ftruncate(fd, l) == -1){
|
269
|
+
close(fd);
|
270
|
+
errno = EACCES;
|
271
|
+
return -1;
|
272
|
+
}
|
273
|
+
return close(fd);
|
274
|
+
}
|
275
|
+
|
276
|
+
// Fake symlink handling by dummy functions:
|
277
|
+
inline int symlink(const char*, const char*){
|
278
|
+
// vxWorks has no symlinks -> always return an error!
|
279
|
+
errno = EACCES;
|
280
|
+
return -1;
|
281
|
+
}
|
282
|
+
|
283
|
+
inline ssize_t readlink(const char*, char*, size_t){
|
284
|
+
// vxWorks has no symlinks -> always return an error!
|
285
|
+
errno = EACCES;
|
286
|
+
return -1;
|
287
|
+
}
|
288
|
+
|
289
|
+
// vxWorks claims to implement gettimeofday in sys/time.h
|
290
|
+
// but nevertheless does not provide it! See
|
291
|
+
// https://support.windriver.com/olsPortal/faces/maintenance/techtipDetail_noHeader.jspx?docId=16442&contentId=WR_TECHTIP_006256
|
292
|
+
// We implement a surrogate version here via clock_gettime:
|
293
|
+
inline int gettimeofday(struct timeval *tv, void * /*tzv*/) {
|
294
|
+
struct timespec ts;
|
295
|
+
clock_gettime(CLOCK_MONOTONIC, &ts);
|
296
|
+
tv->tv_sec = ts.tv_sec;
|
297
|
+
tv->tv_usec = ts.tv_nsec / 1000;
|
298
|
+
return 0;
|
299
|
+
}
|
300
|
+
|
301
|
+
// vxWorks does provide neither struct tms nor function times()!
|
302
|
+
// We implement an empty dummy-function, simply setting the user
|
303
|
+
// and system time to the half of thew actual system ticks-value
|
304
|
+
// and the child user and system time to 0.
|
305
|
+
// Rather ugly but at least it suppresses compiler errors...
|
306
|
+
// Unfortunately, this of course *does* have an severe impact on
|
307
|
+
// dependant libraries, actually this is chrono only! Here it will
|
308
|
+
// not be possible to correctly use user and system times! But
|
309
|
+
// as vxWorks is lacking the ability to calculate user and system
|
310
|
+
// process times there seems to be no other possible solution.
|
311
|
+
struct tms{
|
312
|
+
clock_t tms_utime; // User CPU time
|
313
|
+
clock_t tms_stime; // System CPU time
|
314
|
+
clock_t tms_cutime; // User CPU time of terminated child processes
|
315
|
+
clock_t tms_cstime; // System CPU time of terminated child processes
|
316
|
+
};
|
317
|
+
|
318
|
+
inline clock_t times(struct tms *t){
|
319
|
+
struct timespec ts;
|
320
|
+
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
|
321
|
+
clock_t ticks(static_cast<clock_t>(static_cast<double>(ts.tv_sec) * CLOCKS_PER_SEC +
|
322
|
+
static_cast<double>(ts.tv_nsec) * CLOCKS_PER_SEC / 1000000.0));
|
323
|
+
t->tms_utime = ticks/2U;
|
324
|
+
t->tms_stime = ticks/2U;
|
325
|
+
t->tms_cutime = 0; // vxWorks is lacking the concept of a child process!
|
326
|
+
t->tms_cstime = 0; // -> Set the wait times for childs to 0
|
327
|
+
return ticks;
|
328
|
+
}
|
329
|
+
|
330
|
+
} // extern "C"
|
331
|
+
|
332
|
+
// Put the selfmade functions into the std-namespace, just in case
|
333
|
+
namespace std {
|
334
|
+
# ifdef __RTP__
|
335
|
+
using ::getrlimit;
|
336
|
+
using ::setrlimit;
|
337
|
+
# endif
|
338
|
+
using ::truncate;
|
339
|
+
using ::symlink;
|
340
|
+
using ::readlink;
|
341
|
+
using ::times;
|
342
|
+
using ::gettimeofday;
|
343
|
+
}
|
344
|
+
|
345
|
+
// Some more macro-magic:
|
346
|
+
// vxWorks-around: Some functions are not present or broken in vxWorks
|
347
|
+
// but may be patched to life via helper macros...
|
348
|
+
|
349
|
+
// Include signal.h which might contain a typo to be corrected here
|
350
|
+
#include <signal.h>
|
351
|
+
|
352
|
+
#define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway!
|
353
|
+
#ifndef S_ISSOCK
|
354
|
+
# define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket?
|
355
|
+
#endif
|
356
|
+
#define lstat(p, b) stat(p, b) // lstat() == stat(), as vxWorks has no symlinks!
|
357
|
+
#ifndef FPE_FLTINV
|
358
|
+
# define FPE_FLTINV (FPE_FLTSUB+1) // vxWorks has no FPE_FLTINV, so define one as a dummy
|
359
|
+
#endif
|
360
|
+
#if !defined(BUS_ADRALN) && defined(BUS_ADRALNR)
|
361
|
+
# define BUS_ADRALN BUS_ADRALNR // Correct a supposed typo in vxWorks' <signal.h>
|
362
|
+
#endif
|
363
|
+
//typedef int locale_t; // locale_t is a POSIX-extension, currently unpresent in vxWorks!
|
364
|
+
|
365
|
+
// #include boilerplate code:
|
30
366
|
#include <boost/config/posix_features.hpp>
|
31
|
-
|
367
|
+
|
368
|
+
// vxWorks lies about XSI conformance, there is no nl_types.h:
|
369
|
+
#undef BOOST_HAS_NL_TYPES_H
|