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
@@ -3,18 +3,24 @@
|
|
3
3
|
// Distributed under the Boost Software License, Version 1.0. (See
|
4
4
|
// accompanying file LICENSE_1_0.txt or copy at
|
5
5
|
// http://www.boost.org/LICENSE_1_0.txt)
|
6
|
-
// (C) Copyright 2007-
|
7
|
-
// (C) Copyright 20011-
|
6
|
+
// (C) Copyright 2007-2010 Anthony Williams
|
7
|
+
// (C) Copyright 20011-2012 Vicente J. Botet Escriba
|
8
8
|
|
9
9
|
#include <boost/thread/detail/config.hpp>
|
10
|
+
|
10
11
|
#include <boost/thread/exceptions.hpp>
|
11
12
|
#ifndef BOOST_NO_IOSTREAM
|
12
13
|
#include <ostream>
|
13
14
|
#endif
|
14
15
|
#include <boost/thread/detail/move.hpp>
|
15
16
|
#include <boost/thread/mutex.hpp>
|
17
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
16
18
|
#include <boost/thread/xtime.hpp>
|
19
|
+
#endif
|
17
20
|
#include <boost/thread/detail/thread_heap_alloc.hpp>
|
21
|
+
#include <boost/thread/detail/make_tuple_indices.hpp>
|
22
|
+
#include <boost/thread/detail/invoke.hpp>
|
23
|
+
#include <boost/thread/detail/is_convertible.hpp>
|
18
24
|
#include <boost/assert.hpp>
|
19
25
|
#include <list>
|
20
26
|
#include <algorithm>
|
@@ -23,8 +29,6 @@
|
|
23
29
|
#include <boost/bind.hpp>
|
24
30
|
#include <stdlib.h>
|
25
31
|
#include <memory>
|
26
|
-
//#include <vector>
|
27
|
-
//#include <utility>
|
28
32
|
#include <boost/utility/enable_if.hpp>
|
29
33
|
#include <boost/type_traits/remove_reference.hpp>
|
30
34
|
#include <boost/io/ios_state.hpp>
|
@@ -36,6 +40,9 @@
|
|
36
40
|
#include <boost/chrono/ceil.hpp>
|
37
41
|
#endif
|
38
42
|
|
43
|
+
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
44
|
+
#include <tuple>
|
45
|
+
#endif
|
39
46
|
#include <boost/config/abi_prefix.hpp>
|
40
47
|
|
41
48
|
#ifdef BOOST_MSVC
|
@@ -48,6 +55,38 @@ namespace boost
|
|
48
55
|
|
49
56
|
namespace detail
|
50
57
|
{
|
58
|
+
|
59
|
+
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
60
|
+
|
61
|
+
template<typename F, class ...ArgTypes>
|
62
|
+
class thread_data:
|
63
|
+
public detail::thread_data_base
|
64
|
+
{
|
65
|
+
public:
|
66
|
+
BOOST_THREAD_NO_COPYABLE(thread_data)
|
67
|
+
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
68
|
+
thread_data(BOOST_THREAD_RV_REF(F) f_, BOOST_THREAD_RV_REF(ArgTypes)... args_):
|
69
|
+
fp(boost::forward<F>(f_), boost::forward<ArgTypes>(args_)...)
|
70
|
+
{}
|
71
|
+
#endif
|
72
|
+
template <std::size_t ...Indices>
|
73
|
+
void run2(tuple_indices<Indices...>)
|
74
|
+
{
|
75
|
+
|
76
|
+
invoke(std::move(std::get<0>(fp)), std::move(std::get<Indices>(fp))...);
|
77
|
+
}
|
78
|
+
void run()
|
79
|
+
{
|
80
|
+
typedef typename make_tuple_indices<std::tuple_size<std::tuple<F, ArgTypes...> >::value, 1>::type index_type;
|
81
|
+
|
82
|
+
run2(index_type());
|
83
|
+
}
|
84
|
+
|
85
|
+
private:
|
86
|
+
std::tuple<typename decay<F>::type, typename decay<ArgTypes>::type...> fp;
|
87
|
+
};
|
88
|
+
#else // defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
89
|
+
|
51
90
|
template<typename F>
|
52
91
|
class thread_data:
|
53
92
|
public detail::thread_data_base
|
@@ -115,6 +154,7 @@ namespace boost
|
|
115
154
|
f();
|
116
155
|
}
|
117
156
|
};
|
157
|
+
#endif
|
118
158
|
}
|
119
159
|
|
120
160
|
class BOOST_THREAD_DECL thread
|
@@ -125,24 +165,55 @@ namespace boost
|
|
125
165
|
BOOST_THREAD_MOVABLE_ONLY(thread)
|
126
166
|
protected:
|
127
167
|
|
168
|
+
struct dummy;
|
169
|
+
|
128
170
|
void release_handle();
|
129
171
|
|
130
172
|
detail::thread_data_ptr thread_info;
|
131
173
|
|
132
|
-
|
133
|
-
|
174
|
+
private:
|
175
|
+
bool start_thread_noexcept();
|
176
|
+
bool start_thread_noexcept(const attributes& attr);
|
177
|
+
public:
|
178
|
+
void start_thread()
|
179
|
+
{
|
180
|
+
if (!start_thread_noexcept())
|
181
|
+
{
|
182
|
+
boost::throw_exception(thread_resource_error());
|
183
|
+
}
|
184
|
+
}
|
185
|
+
void start_thread(const attributes& attr)
|
186
|
+
{
|
187
|
+
if (!start_thread_noexcept(attr))
|
188
|
+
{
|
189
|
+
boost::throw_exception(thread_resource_error());
|
190
|
+
}
|
191
|
+
}
|
134
192
|
|
135
193
|
explicit thread(detail::thread_data_ptr data);
|
136
194
|
|
137
195
|
detail::thread_data_ptr get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const;
|
138
196
|
|
139
197
|
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
198
|
+
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
199
|
+
template<typename F, class ...ArgTypes>
|
200
|
+
static inline detail::thread_data_ptr make_thread_info(BOOST_THREAD_RV_REF(F) f, BOOST_THREAD_RV_REF(ArgTypes)... args)
|
201
|
+
{
|
202
|
+
return detail::thread_data_ptr(detail::heap_new<
|
203
|
+
detail::thread_data<typename boost::remove_reference<F>::type, ArgTypes...>
|
204
|
+
>(
|
205
|
+
boost::forward<F>(f), boost::forward<ArgTypes>(args)...
|
206
|
+
)
|
207
|
+
);
|
208
|
+
}
|
209
|
+
#else
|
140
210
|
template<typename F>
|
141
211
|
static inline detail::thread_data_ptr make_thread_info(BOOST_THREAD_RV_REF(F) f)
|
142
212
|
{
|
143
213
|
return detail::thread_data_ptr(detail::heap_new<detail::thread_data<typename boost::remove_reference<F>::type> >(
|
144
214
|
boost::forward<F>(f)));
|
145
215
|
}
|
216
|
+
#endif
|
146
217
|
static inline detail::thread_data_ptr make_thread_info(void (*f)())
|
147
218
|
{
|
148
219
|
return detail::thread_data_ptr(detail::heap_new<detail::thread_data<void(*)()> >(
|
@@ -150,7 +221,12 @@ namespace boost
|
|
150
221
|
}
|
151
222
|
#else
|
152
223
|
template<typename F>
|
153
|
-
static inline detail::thread_data_ptr make_thread_info(F f
|
224
|
+
static inline detail::thread_data_ptr make_thread_info(F f
|
225
|
+
, typename disable_if_c<
|
226
|
+
//boost::thread_detail::is_convertible<F&,BOOST_THREAD_RV_REF(F)>::value ||
|
227
|
+
is_same<typename decay<F>::type, thread>::value,
|
228
|
+
dummy* >::type=0
|
229
|
+
)
|
154
230
|
{
|
155
231
|
return detail::thread_data_ptr(detail::heap_new<detail::thread_data<F> >(f));
|
156
232
|
}
|
@@ -161,7 +237,6 @@ namespace boost
|
|
161
237
|
}
|
162
238
|
|
163
239
|
#endif
|
164
|
-
struct dummy;
|
165
240
|
public:
|
166
241
|
#if 0 // This should not be needed anymore. Use instead BOOST_THREAD_MAKE_RV_REF.
|
167
242
|
#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100)
|
@@ -171,6 +246,7 @@ namespace boost
|
|
171
246
|
thread() BOOST_NOEXCEPT;
|
172
247
|
~thread()
|
173
248
|
{
|
249
|
+
|
174
250
|
#if defined BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
|
175
251
|
if (joinable()) {
|
176
252
|
std::terminate();
|
@@ -184,7 +260,7 @@ namespace boost
|
|
184
260
|
class F
|
185
261
|
>
|
186
262
|
explicit thread(BOOST_THREAD_RV_REF(F) f
|
187
|
-
|
263
|
+
//, typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0
|
188
264
|
):
|
189
265
|
thread_info(make_thread_info(thread_detail::decay_copy(boost::forward<F>(f))))
|
190
266
|
{
|
@@ -193,7 +269,7 @@ namespace boost
|
|
193
269
|
template <
|
194
270
|
class F
|
195
271
|
>
|
196
|
-
thread(attributes& attrs, BOOST_THREAD_RV_REF(F) f):
|
272
|
+
thread(attributes const& attrs, BOOST_THREAD_RV_REF(F) f):
|
197
273
|
thread_info(make_thread_info(thread_detail::decay_copy(boost::forward<F>(f))))
|
198
274
|
{
|
199
275
|
start_thread(attrs);
|
@@ -208,7 +284,7 @@ namespace boost
|
|
208
284
|
start_thread();
|
209
285
|
}
|
210
286
|
template <class F>
|
211
|
-
thread(attributes& attrs, F f):
|
287
|
+
thread(attributes const& attrs, F f):
|
212
288
|
thread_info(make_thread_info(f))
|
213
289
|
{
|
214
290
|
start_thread(attrs);
|
@@ -216,15 +292,19 @@ namespace boost
|
|
216
292
|
#else
|
217
293
|
template <class F>
|
218
294
|
explicit thread(F f
|
219
|
-
|
220
|
-
|
295
|
+
, typename disable_if_c<
|
296
|
+
boost::thread_detail::is_convertible<F&,BOOST_THREAD_RV_REF(F)>::value
|
297
|
+
//|| is_same<typename decay<F>::type, thread>::value
|
298
|
+
, dummy* >::type=0
|
299
|
+
):
|
221
300
|
thread_info(make_thread_info(f))
|
222
301
|
{
|
223
302
|
start_thread();
|
224
303
|
}
|
225
304
|
template <class F>
|
226
|
-
thread(attributes& attrs, F f
|
227
|
-
, typename disable_if<boost::is_convertible<F&,BOOST_THREAD_RV_REF(F) >, dummy* >::type=0
|
305
|
+
thread(attributes const& attrs, F f
|
306
|
+
, typename disable_if<boost::thread_detail::is_convertible<F&,BOOST_THREAD_RV_REF(F) >, dummy* >::type=0
|
307
|
+
):
|
228
308
|
thread_info(make_thread_info(f))
|
229
309
|
{
|
230
310
|
start_thread(attrs);
|
@@ -234,14 +314,22 @@ namespace boost
|
|
234
314
|
explicit thread(BOOST_THREAD_RV_REF(F) f
|
235
315
|
, typename disable_if<is_same<typename decay<F>::type, thread>, dummy* >::type=0
|
236
316
|
):
|
237
|
-
|
317
|
+
#ifdef BOOST_THREAD_USES_MOVE
|
318
|
+
thread_info(make_thread_info(boost::move<F>(f))) // todo : Add forward
|
319
|
+
#else
|
320
|
+
thread_info(make_thread_info(f)) // todo : Add forward
|
321
|
+
#endif
|
238
322
|
{
|
239
323
|
start_thread();
|
240
324
|
}
|
241
325
|
|
242
326
|
template <class F>
|
243
|
-
thread(attributes& attrs, BOOST_THREAD_RV_REF(F) f):
|
244
|
-
|
327
|
+
thread(attributes const& attrs, BOOST_THREAD_RV_REF(F) f):
|
328
|
+
#ifdef BOOST_THREAD_USES_MOVE
|
329
|
+
thread_info(make_thread_info(boost::move<F>(f))) // todo : Add forward
|
330
|
+
#else
|
331
|
+
thread_info(make_thread_info(f)) // todo : Add forward
|
332
|
+
#endif
|
245
333
|
{
|
246
334
|
start_thread(attrs);
|
247
335
|
}
|
@@ -272,8 +360,32 @@ namespace boost
|
|
272
360
|
return *this;
|
273
361
|
}
|
274
362
|
|
363
|
+
#if defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
364
|
+
template <class F, class Arg, class ...Args>
|
365
|
+
thread(F&& f, Arg&& arg, Args&&... args) :
|
366
|
+
thread_info(make_thread_info(
|
367
|
+
thread_detail::decay_copy(boost::forward<F>(f)),
|
368
|
+
thread_detail::decay_copy(boost::forward<Arg>(arg)),
|
369
|
+
thread_detail::decay_copy(boost::forward<Args>(args))...)
|
370
|
+
)
|
371
|
+
|
372
|
+
{
|
373
|
+
start_thread();
|
374
|
+
}
|
375
|
+
template <class F, class Arg, class ...Args>
|
376
|
+
thread(attributes const& attrs, F&& f, Arg&& arg, Args&&... args) :
|
377
|
+
thread_info(make_thread_info(
|
378
|
+
thread_detail::decay_copy(boost::forward<F>(f)),
|
379
|
+
thread_detail::decay_copy(boost::forward<Arg>(arg)),
|
380
|
+
thread_detail::decay_copy(boost::forward<Args>(args))...)
|
381
|
+
)
|
382
|
+
|
383
|
+
{
|
384
|
+
start_thread(attrs);
|
385
|
+
}
|
386
|
+
#else
|
275
387
|
template <class F,class A1>
|
276
|
-
thread(F f,A1 a1,typename disable_if<boost::is_convertible<F&,thread_attributes >, dummy* >::type=0):
|
388
|
+
thread(F f,A1 a1,typename disable_if<boost::thread_detail::is_convertible<F&,thread_attributes >, dummy* >::type=0):
|
277
389
|
thread_info(make_thread_info(boost::bind(boost::type<void>(),f,a1)))
|
278
390
|
{
|
279
391
|
start_thread();
|
@@ -333,18 +445,26 @@ namespace boost
|
|
333
445
|
{
|
334
446
|
start_thread();
|
335
447
|
}
|
336
|
-
|
448
|
+
#endif
|
337
449
|
void swap(thread& x) BOOST_NOEXCEPT
|
338
450
|
{
|
339
451
|
thread_info.swap(x.thread_info);
|
340
452
|
}
|
341
453
|
|
342
|
-
class
|
454
|
+
class id;
|
455
|
+
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
|
456
|
+
inline id get_id() const BOOST_NOEXCEPT;
|
457
|
+
#else
|
343
458
|
id get_id() const BOOST_NOEXCEPT;
|
459
|
+
#endif
|
344
460
|
|
345
461
|
|
346
462
|
bool joinable() const BOOST_NOEXCEPT;
|
347
|
-
|
463
|
+
private:
|
464
|
+
bool join_noexcept();
|
465
|
+
public:
|
466
|
+
inline void join();
|
467
|
+
|
348
468
|
#ifdef BOOST_THREAD_USES_CHRONO
|
349
469
|
template <class Rep, class Period>
|
350
470
|
bool try_join_for(const chrono::duration<Rep, Period>& rel_time)
|
@@ -356,8 +476,13 @@ namespace boost
|
|
356
476
|
{
|
357
477
|
using namespace chrono;
|
358
478
|
system_clock::time_point s_now = system_clock::now();
|
359
|
-
|
360
|
-
|
479
|
+
bool joined= false;
|
480
|
+
do {
|
481
|
+
typename Clock::duration d = ceil<nanoseconds>(t-Clock::now());
|
482
|
+
if (d <= Clock::duration::zero()) return false; // in case the Clock::time_point t is already reached
|
483
|
+
joined = try_join_until(s_now + d);
|
484
|
+
} while (! joined);
|
485
|
+
return true;
|
361
486
|
}
|
362
487
|
template <class Duration>
|
363
488
|
bool try_join_until(const chrono::time_point<chrono::system_clock, Duration>& t)
|
@@ -368,10 +493,15 @@ namespace boost
|
|
368
493
|
}
|
369
494
|
#endif
|
370
495
|
#if defined(BOOST_THREAD_PLATFORM_WIN32)
|
371
|
-
bool timed_join(const system_time& abs_time);
|
372
496
|
private:
|
373
|
-
bool
|
497
|
+
bool do_try_join_until_noexcept(uintmax_t milli, bool& res);
|
498
|
+
inline bool do_try_join_until(uintmax_t milli);
|
374
499
|
public:
|
500
|
+
bool timed_join(const system_time& abs_time);
|
501
|
+
//{
|
502
|
+
// return do_try_join_until(get_milliseconds_until(wait_until));
|
503
|
+
//}
|
504
|
+
|
375
505
|
#ifdef BOOST_THREAD_USES_CHRONO
|
376
506
|
bool try_join_until(const chrono::time_point<chrono::system_clock, chrono::nanoseconds>& tp)
|
377
507
|
{
|
@@ -382,35 +512,37 @@ namespace boost
|
|
382
512
|
|
383
513
|
|
384
514
|
#else
|
515
|
+
private:
|
516
|
+
bool do_try_join_until_noexcept(struct timespec const &timeout, bool& res);
|
517
|
+
inline bool do_try_join_until(struct timespec const &timeout);
|
518
|
+
public:
|
519
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
385
520
|
bool timed_join(const system_time& abs_time)
|
386
521
|
{
|
387
|
-
struct timespec const ts=detail::
|
522
|
+
struct timespec const ts=detail::to_timespec(abs_time);
|
388
523
|
return do_try_join_until(ts);
|
389
524
|
}
|
525
|
+
#endif
|
390
526
|
#ifdef BOOST_THREAD_USES_CHRONO
|
391
527
|
bool try_join_until(const chrono::time_point<chrono::system_clock, chrono::nanoseconds>& tp)
|
392
528
|
{
|
393
529
|
using namespace chrono;
|
394
530
|
nanoseconds d = tp.time_since_epoch();
|
395
|
-
timespec ts;
|
396
|
-
seconds s = duration_cast<seconds>(d);
|
397
|
-
ts.tv_sec = static_cast<long>(s.count());
|
398
|
-
ts.tv_nsec = static_cast<long>((d - s).count());
|
531
|
+
timespec ts = boost::detail::to_timespec(d);
|
399
532
|
return do_try_join_until(ts);
|
400
533
|
}
|
401
534
|
#endif
|
402
|
-
private:
|
403
|
-
bool do_try_join_until(struct timespec const &timeout);
|
404
|
-
public:
|
405
535
|
|
406
536
|
#endif
|
537
|
+
public:
|
407
538
|
|
539
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
408
540
|
template<typename TimeDuration>
|
409
541
|
inline bool timed_join(TimeDuration const& rel_time)
|
410
542
|
{
|
411
543
|
return timed_join(get_system_time()+rel_time);
|
412
544
|
}
|
413
|
-
|
545
|
+
#endif
|
414
546
|
void detach();
|
415
547
|
|
416
548
|
static unsigned hardware_concurrency() BOOST_NOEXCEPT;
|
@@ -419,12 +551,13 @@ namespace boost
|
|
419
551
|
typedef detail::thread_data_base::native_handle_type native_handle_type;
|
420
552
|
native_handle_type native_handle();
|
421
553
|
|
422
|
-
#if defined
|
554
|
+
#if defined BOOST_THREAD_PROVIDES_THREAD_EQ
|
423
555
|
// Use thread::id when comparisions are needed
|
424
556
|
// backwards compatibility
|
425
557
|
bool operator==(const thread& other) const;
|
426
558
|
bool operator!=(const thread& other) const;
|
427
559
|
#endif
|
560
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
428
561
|
static inline void yield() BOOST_NOEXCEPT
|
429
562
|
{
|
430
563
|
this_thread::yield();
|
@@ -434,10 +567,13 @@ namespace boost
|
|
434
567
|
{
|
435
568
|
this_thread::sleep(xt);
|
436
569
|
}
|
570
|
+
#endif
|
437
571
|
|
572
|
+
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
438
573
|
// extensions
|
439
574
|
void interrupt();
|
440
575
|
bool interruption_requested() const BOOST_NOEXCEPT;
|
576
|
+
#endif
|
441
577
|
};
|
442
578
|
|
443
579
|
inline void swap(thread& lhs,thread& rhs) BOOST_NOEXCEPT
|
@@ -456,16 +592,24 @@ namespace boost
|
|
456
592
|
|
457
593
|
namespace this_thread
|
458
594
|
{
|
595
|
+
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
|
596
|
+
inline thread::id get_id() BOOST_NOEXCEPT;
|
597
|
+
#else
|
459
598
|
thread::id BOOST_THREAD_DECL get_id() BOOST_NOEXCEPT;
|
599
|
+
#endif
|
460
600
|
|
601
|
+
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
461
602
|
void BOOST_THREAD_DECL interruption_point();
|
462
603
|
bool BOOST_THREAD_DECL interruption_enabled() BOOST_NOEXCEPT;
|
463
604
|
bool BOOST_THREAD_DECL interruption_requested() BOOST_NOEXCEPT;
|
605
|
+
#endif
|
464
606
|
|
607
|
+
#if defined BOOST_THREAD_USES_DATETIME
|
465
608
|
inline BOOST_SYMBOL_VISIBLE void sleep(xtime const& abs_time)
|
466
609
|
{
|
467
610
|
sleep(system_time(abs_time));
|
468
611
|
}
|
612
|
+
#endif
|
469
613
|
}
|
470
614
|
|
471
615
|
class BOOST_SYMBOL_VISIBLE thread::id
|
@@ -501,11 +645,7 @@ namespace boost
|
|
501
645
|
public:
|
502
646
|
id() BOOST_NOEXCEPT:
|
503
647
|
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
504
|
-
#if defined(BOOST_THREAD_PLATFORM_WIN32)
|
505
|
-
thread_data(0)
|
506
|
-
#else
|
507
648
|
thread_data(0)
|
508
|
-
#endif
|
509
649
|
#else
|
510
650
|
thread_data()
|
511
651
|
#endif
|
@@ -583,6 +723,61 @@ namespace boost
|
|
583
723
|
#endif
|
584
724
|
};
|
585
725
|
|
726
|
+
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
|
727
|
+
thread::id thread::get_id() const BOOST_NOEXCEPT
|
728
|
+
{
|
729
|
+
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
730
|
+
return const_cast<thread*>(this)->native_handle();
|
731
|
+
#else
|
732
|
+
detail::thread_data_ptr const local_thread_info=(get_thread_info)();
|
733
|
+
return (local_thread_info? id(local_thread_info) : id());
|
734
|
+
#endif
|
735
|
+
}
|
736
|
+
|
737
|
+
namespace this_thread
|
738
|
+
{
|
739
|
+
inline thread::id get_id() BOOST_NOEXCEPT
|
740
|
+
{
|
741
|
+
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
742
|
+
return pthread_self();
|
743
|
+
#else
|
744
|
+
boost::detail::thread_data_base* const thread_info=get_or_make_current_thread_data();
|
745
|
+
return (thread_info?thread::id(thread_info->shared_from_this()):thread::id());
|
746
|
+
#endif
|
747
|
+
}
|
748
|
+
}
|
749
|
+
#endif
|
750
|
+
void thread::join() {
|
751
|
+
if (this_thread::get_id() == get_id())
|
752
|
+
boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
|
753
|
+
|
754
|
+
BOOST_THREAD_VERIFY_PRECONDITION( join_noexcept(),
|
755
|
+
thread_resource_error(system::errc::invalid_argument, "boost thread: thread not joinable")
|
756
|
+
);
|
757
|
+
}
|
758
|
+
|
759
|
+
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
|
760
|
+
bool thread::do_try_join_until(struct timespec const &timeout)
|
761
|
+
#else
|
762
|
+
bool thread::do_try_join_until(uintmax_t timeout)
|
763
|
+
#endif
|
764
|
+
{
|
765
|
+
if (this_thread::get_id() == get_id())
|
766
|
+
boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
|
767
|
+
bool res;
|
768
|
+
if (do_try_join_until_noexcept(timeout, res))
|
769
|
+
{
|
770
|
+
return res;
|
771
|
+
}
|
772
|
+
else
|
773
|
+
{
|
774
|
+
BOOST_THREAD_THROW_ELSE_RETURN(
|
775
|
+
(thread_resource_error(system::errc::invalid_argument, "boost thread: thread not joinable")),
|
776
|
+
false
|
777
|
+
);
|
778
|
+
}
|
779
|
+
}
|
780
|
+
|
586
781
|
#if !defined(BOOST_NO_IOSTREAM) && defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
|
587
782
|
template<class charT, class traits>
|
588
783
|
BOOST_SYMBOL_VISIBLE
|
@@ -593,7 +788,7 @@ namespace boost
|
|
593
788
|
}
|
594
789
|
#endif
|
595
790
|
|
596
|
-
#if defined
|
791
|
+
#if defined BOOST_THREAD_PROVIDES_THREAD_EQ
|
597
792
|
inline bool thread::operator==(const thread& other) const
|
598
793
|
{
|
599
794
|
return get_id()==other.get_id();
|