passenger 4.0.20 → 4.0.21
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/NEWS +15 -0
- data/README.md +5 -3
- data/Rakefile +1 -0
- data/bin/passenger-config +1 -5
- data/bin/passenger-install-apache2-module +53 -5
- data/bin/passenger-install-nginx-module +19 -6
- data/bin/passenger-memory-stats +3 -3
- data/build/agents.rb +11 -8
- data/build/apache2.rb +9 -5
- data/build/basics.rb +15 -21
- data/build/common_library.rb +16 -6
- data/build/cplusplus_support.rb +5 -5
- data/build/cxx_tests.rb +3 -3
- data/build/documentation.rb +1 -1
- data/build/misc.rb +4 -37
- data/build/node_tests.rb +29 -0
- data/build/oxt_tests.rb +1 -1
- data/build/packaging.rb +29 -10
- data/build/preprocessor.rb +2 -1
- data/build/test_basics.rb +15 -6
- data/debian.template/locations.ini.template +1 -0
- data/debian.template/passenger.install.template +1 -0
- data/dev/copy_boost_headers.rb +7 -3
- data/dev/run_travis.sh +32 -16
- data/doc/Users guide Apache.idmap.txt +22 -34
- data/doc/Users guide Apache.txt +20 -234
- data/doc/Users guide Nginx.idmap.txt +84 -66
- data/doc/Users guide Nginx.txt +50 -1
- data/doc/Users guide Standalone.idmap.txt +74 -0
- data/doc/Users guide Standalone.txt +22 -9
- data/doc/Users guide.txt +51 -0
- data/doc/users_guide_snippets/environment_variables.txt +0 -3
- data/doc/users_guide_snippets/installation.txt +337 -380
- data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
- data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
- data/doc/users_guide_snippets/support_information.txt +2 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
- data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
- data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
- data/ext/apache2/Bucket.h +1 -1
- data/ext/apache2/Configuration.hpp +0 -44
- data/ext/apache2/CreateDirConfig.cpp +1 -1
- data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
- data/ext/apache2/Hooks.cpp +28 -21
- data/ext/apache2/MergeDirConfig.cpp +1 -0
- data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
- data/ext/apache2/SetHeaders.cpp +73 -0
- data/ext/apache2/SetHeaders.cpp.erb +88 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
- data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
- data/ext/boost/algorithm/string/formatter.hpp +2 -2
- data/ext/boost/assert.hpp +6 -1
- data/ext/boost/atomic.hpp +18 -0
- data/ext/boost/atomic/atomic.hpp +241 -0
- data/ext/boost/atomic/detail/base.hpp +585 -0
- data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
- data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
- data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
- data/ext/boost/atomic/detail/config.hpp +54 -0
- data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
- data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
- data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
- data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
- data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
- data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
- data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
- data/ext/boost/atomic/detail/interlocked.hpp +200 -0
- data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
- data/ext/boost/atomic/detail/lockpool.hpp +97 -0
- data/ext/boost/atomic/detail/platform.hpp +62 -0
- data/ext/boost/atomic/detail/type-classification.hpp +45 -0
- data/ext/boost/chrono/config.hpp +8 -3
- data/ext/boost/chrono/duration.hpp +9 -10
- data/ext/boost/chrono/system_clocks.hpp +1 -1
- data/ext/boost/chrono/time_point.hpp +4 -3
- data/ext/boost/config/auto_link.hpp +53 -52
- data/ext/boost/config/compiler/borland.hpp +1 -0
- data/ext/boost/config/compiler/clang.hpp +24 -1
- data/ext/boost/config/compiler/codegear.hpp +1 -0
- data/ext/boost/config/compiler/common_edg.hpp +1 -0
- data/ext/boost/config/compiler/cray.hpp +1 -0
- data/ext/boost/config/compiler/digitalmars.hpp +1 -0
- data/ext/boost/config/compiler/gcc.hpp +29 -3
- data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
- data/ext/boost/config/compiler/hp_acc.hpp +1 -0
- data/ext/boost/config/compiler/intel.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -0
- data/ext/boost/config/compiler/mpw.hpp +1 -0
- data/ext/boost/config/compiler/pathscale.hpp +1 -0
- data/ext/boost/config/compiler/pgi.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
- data/ext/boost/config/compiler/vacpp.hpp +3 -2
- data/ext/boost/config/compiler/visualc.hpp +25 -11
- data/ext/boost/config/platform/vxworks.hpp +353 -15
- data/ext/boost/config/select_compiler_config.hpp +4 -4
- data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
- data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
- data/ext/boost/config/suffix.hpp +45 -19
- data/ext/boost/date_time/format_date_parser.hpp +1 -11
- data/ext/boost/date_time/strings_from_facet.hpp +5 -3
- data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
- data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
- data/ext/boost/detail/endian.hpp +52 -4
- data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
- data/ext/boost/detail/select_type.hpp +36 -0
- data/ext/boost/exception/current_exception_cast.hpp +1 -1
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
- data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
- data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/ext/boost/exception/detail/type_info.hpp +1 -1
- data/ext/boost/exception/diagnostic_information.hpp +15 -14
- data/ext/boost/exception/exception.hpp +1 -1
- data/ext/boost/exception/get_error_info.hpp +1 -1
- data/ext/boost/exception/info.hpp +12 -13
- data/ext/boost/exception/to_string.hpp +6 -1
- data/ext/boost/exception/to_string_stub.hpp +9 -1
- data/ext/boost/foreach.hpp +5 -5
- data/ext/boost/function/function_template.hpp +6 -6
- data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
- data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
- data/ext/boost/functional/hash/extensions.hpp +14 -2
- data/ext/boost/functional/hash/hash.hpp +26 -5
- data/ext/boost/get_pointer.hpp +17 -2
- data/ext/boost/integer_traits.hpp +1 -1
- data/ext/boost/lexical_cast.hpp +615 -395
- data/ext/boost/libs/atomic/lockpool.cpp +24 -0
- data/ext/boost/libs/system/src/error_code.cpp +25 -18
- data/ext/boost/libs/thread/src/future.cpp +7 -5
- data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
- data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
- data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/math/policies/policy.hpp +10 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
- data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
- data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
- data/ext/boost/math/special_functions/sign.hpp +13 -8
- data/ext/boost/math/tools/config.hpp +38 -16
- data/ext/boost/move/algorithm.hpp +275 -0
- data/ext/boost/move/core.hpp +332 -0
- data/ext/boost/move/detail/config_begin.hpp +23 -0
- data/ext/boost/move/detail/config_end.hpp +20 -0
- data/ext/boost/move/detail/meta_utils.hpp +158 -0
- data/ext/boost/move/iterator.hpp +298 -0
- data/ext/boost/move/move.hpp +10 -1256
- data/ext/boost/move/traits.hpp +142 -0
- data/ext/boost/move/utility.hpp +194 -0
- data/ext/boost/mpl/assert.hpp +72 -4
- data/ext/boost/noncopyable.hpp +15 -3
- data/ext/boost/pointer_to_other.hpp +55 -0
- data/ext/boost/range/concepts.hpp +4 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
- data/ext/boost/range/empty.hpp +1 -1
- data/ext/boost/range/iterator_range_core.hpp +4 -1
- data/ext/boost/range/iterator_range_io.hpp +2 -2
- data/ext/boost/ratio/config.hpp +6 -0
- data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
- data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
- data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
- data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
- data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
- data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
- data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
- data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
- data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
- data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
- data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
- data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
- data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
- data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
- data/ext/boost/smart_ptr/shared_array.hpp +135 -20
- data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
- data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
- data/ext/boost/static_assert.hpp +74 -17
- data/ext/boost/system/error_code.hpp +76 -68
- data/ext/boost/system/system_error.hpp +5 -1
- data/ext/boost/thread/barrier.hpp +6 -2
- data/ext/boost/thread/completion_latch.hpp +233 -0
- data/ext/boost/thread/condition.hpp +6 -1
- data/ext/boost/thread/detail/async_func.hpp +571 -0
- data/ext/boost/thread/detail/config.hpp +248 -40
- data/ext/boost/thread/detail/counter.hpp +93 -0
- data/ext/boost/thread/detail/delete.hpp +12 -0
- data/ext/boost/thread/detail/invoke.hpp +1351 -0
- data/ext/boost/thread/detail/is_convertible.hpp +48 -0
- data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
- data/ext/boost/thread/detail/log.hpp +83 -0
- data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
- data/ext/boost/thread/detail/move.hpp +32 -16
- data/ext/boost/thread/detail/thread.hpp +236 -41
- data/ext/boost/thread/detail/thread_group.hpp +55 -9
- data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
- data/ext/boost/thread/exceptions.hpp +2 -0
- data/ext/boost/thread/externally_locked.hpp +351 -0
- data/ext/boost/thread/externally_locked_stream.hpp +170 -0
- data/ext/boost/thread/future.hpp +2517 -455
- data/ext/boost/thread/future_error_code.hpp +61 -0
- data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
- data/ext/boost/thread/latch.hpp +142 -0
- data/ext/boost/thread/lock_algorithms.hpp +468 -0
- data/ext/boost/thread/lock_concepts.hpp +197 -0
- data/ext/boost/thread/lock_factories.hpp +78 -0
- data/ext/boost/thread/lock_guard.hpp +88 -0
- data/ext/boost/thread/lock_options.hpp +31 -0
- data/ext/boost/thread/lock_traits.hpp +45 -0
- data/ext/boost/thread/lock_types.hpp +1226 -0
- data/ext/boost/thread/lockable_adapter.hpp +226 -0
- data/ext/boost/thread/lockable_concepts.hpp +157 -0
- data/ext/boost/thread/lockable_traits.hpp +207 -0
- data/ext/boost/thread/locks.hpp +5 -1816
- data/ext/boost/thread/mutex.hpp +33 -1
- data/ext/boost/thread/null_mutex.hpp +243 -0
- data/ext/boost/thread/once.hpp +10 -1
- data/ext/boost/thread/poly_lockable.hpp +68 -0
- data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
- data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
- data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
- data/ext/boost/thread/pthread/mutex.hpp +101 -38
- data/ext/boost/thread/pthread/once.hpp +459 -44
- data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
- data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
- data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
- data/ext/boost/thread/pthread/thread_data.hpp +53 -50
- data/ext/boost/thread/pthread/timespec.hpp +96 -12
- data/ext/boost/thread/recursive_mutex.hpp +44 -1
- data/ext/boost/thread/reverse_lock.hpp +3 -2
- data/ext/boost/thread/scoped_thread.hpp +285 -0
- data/ext/boost/thread/shared_lock_guard.hpp +2 -1
- data/ext/boost/thread/shared_mutex.hpp +23 -0
- data/ext/boost/thread/strict_lock.hpp +235 -0
- data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
- data/ext/boost/thread/sync_queue.hpp +516 -0
- data/ext/boost/thread/synchronized_value.hpp +1001 -0
- data/ext/boost/thread/testable_mutex.hpp +148 -0
- data/ext/boost/thread/thread.hpp +1 -13
- data/ext/boost/thread/thread_functors.hpp +57 -0
- data/ext/boost/thread/thread_guard.hpp +46 -0
- data/ext/boost/thread/thread_only.hpp +29 -0
- data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
- data/ext/boost/thread/v2/thread.hpp +37 -10
- data/ext/boost/thread/xtime.hpp +2 -1
- data/ext/boost/token_functions.hpp +16 -16
- data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
- data/ext/boost/type_traits/add_reference.hpp +1 -1
- data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/common_type.hpp +11 -12
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
- data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
- data/ext/boost/type_traits/has_left_shift.hpp +49 -0
- data/ext/boost/type_traits/has_right_shift.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
- data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
- data/ext/boost/type_traits/intrinsics.hpp +18 -2
- data/ext/boost/type_traits/is_abstract.hpp +1 -1
- data/ext/boost/type_traits/is_array.hpp +1 -1
- data/ext/boost/type_traits/is_const.hpp +1 -1
- data/ext/boost/type_traits/is_convertible.hpp +78 -17
- data/ext/boost/type_traits/is_function.hpp +6 -1
- data/ext/boost/type_traits/is_integral.hpp +6 -1
- data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
- data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
- data/ext/boost/type_traits/is_pod.hpp +3 -1
- data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/ext/boost/type_traits/is_volatile.hpp +1 -1
- data/ext/boost/type_traits/make_signed.hpp +153 -0
- data/ext/boost/type_traits/make_unsigned.hpp +16 -0
- data/ext/boost/type_traits/remove_const.hpp +1 -1
- data/ext/boost/type_traits/remove_cv.hpp +1 -1
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/remove_volatile.hpp +1 -1
- data/ext/boost/unordered/detail/allocate.hpp +1120 -0
- data/ext/boost/unordered/detail/buckets.hpp +876 -0
- data/ext/boost/unordered/detail/equivalent.hpp +680 -0
- data/ext/boost/unordered/detail/extract_key.hpp +183 -0
- data/ext/boost/unordered/detail/fwd.hpp +23 -0
- data/ext/boost/unordered/detail/table.hpp +861 -0
- data/ext/boost/unordered/detail/unique.hpp +622 -0
- data/ext/boost/unordered/detail/util.hpp +260 -0
- data/ext/boost/unordered/unordered_map.hpp +1652 -0
- data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
- data/ext/boost/unordered/unordered_set.hpp +1549 -0
- data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
- data/ext/boost/unordered_map.hpp +18 -0
- data/ext/boost/unordered_set.hpp +18 -0
- data/ext/boost/utility/addressof.hpp +2 -2
- data/ext/boost/utility/result_of.hpp +8 -1
- data/ext/boost/version.hpp +2 -2
- data/ext/common/Account.h +1 -1
- data/ext/common/AccountsDatabase.h +1 -1
- data/ext/common/AgentsStarter.cpp +3 -1
- data/ext/common/AgentsStarter.h +2 -2
- data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
- data/ext/common/ApplicationPool2/AppTypes.h +17 -8
- data/ext/common/ApplicationPool2/Common.h +12 -12
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
- data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
- data/ext/common/ApplicationPool2/Group.h +6 -6
- data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
- data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
- data/ext/common/ApplicationPool2/Pool.h +21 -21
- data/ext/common/ApplicationPool2/Process.h +6 -6
- data/ext/common/ApplicationPool2/Session.h +1 -1
- data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
- data/ext/common/ApplicationPool2/Socket.h +2 -2
- data/ext/common/ApplicationPool2/Spawner.h +64 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
- data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
- data/ext/common/BackgroundEventLoop.cpp +4 -4
- data/ext/common/BackgroundEventLoop.h +1 -1
- data/ext/common/Constants.h +13 -1
- data/ext/common/EventedBufferedInput.h +8 -8
- data/ext/common/Exceptions.cpp +71 -0
- data/ext/common/Exceptions.h +60 -7
- data/ext/common/FileDescriptor.h +4 -4
- data/ext/common/MessageClient.h +1 -1
- data/ext/common/MessageServer.h +5 -5
- data/ext/common/MultiLibeio.cpp +3 -3
- data/ext/common/MultiLibeio.h +2 -2
- data/ext/common/RandomGenerator.h +11 -11
- data/ext/common/ResourceLocator.h +8 -1
- data/ext/common/SafeLibev.h +12 -12
- data/ext/common/ServerInstanceDir.h +11 -3
- data/ext/common/UnionStation.h +10 -10
- data/ext/common/Utils.cpp +11 -13
- data/ext/common/Utils.h +9 -9
- data/ext/common/Utils/BlockingQueue.h +10 -10
- data/ext/common/Utils/BufferedIO.h +1 -1
- data/ext/common/Utils/CachedFileStat.hpp +2 -2
- data/ext/common/Utils/FileChangeChecker.h +1 -1
- data/ext/common/Utils/HashMap.h +13 -4
- data/ext/common/Utils/IOUtils.cpp +33 -10
- data/ext/common/Utils/IniFile.h +3 -3
- data/ext/common/Utils/Lock.h +2 -2
- data/ext/common/Utils/MessagePassing.h +10 -10
- data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
- data/ext/common/Utils/ScopeGuard.h +5 -5
- data/ext/common/Utils/jsoncpp.cpp +2 -0
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
- data/ext/common/agents/HelperAgent/Main.cpp +18 -18
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
- data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
- data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
- data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/SpawnPreparer.cpp +1 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
- data/ext/common/agents/Watchdog/Main.cpp +81 -73
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/Makefile.in +110 -50
- data/ext/libev/README +8 -8
- data/ext/libev/aclocal.m4 +1503 -861
- data/ext/libev/config.guess +290 -304
- data/ext/libev/config.sub +77 -198
- data/ext/libev/configure +1735 -890
- data/ext/libev/configure.ac +3 -2
- data/ext/libev/ev++.h +6 -6
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/libev/event.c +29 -6
- data/ext/libev/event.h +9 -2
- data/ext/libev/ltmain.sh +2632 -1384
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +3 -1
- data/ext/nginx/ContentHandler.c +25 -2
- data/ext/nginx/CreateLocationConfig.c +1 -0
- data/ext/nginx/CreateLocationConfig.c.erb +1 -1
- data/ext/nginx/MergeLocationConfig.c +1 -0
- data/ext/nginx/MergeLocationConfig.c.erb +1 -1
- data/ext/nginx/config +12 -0
- data/ext/oxt/dynamic_thread_group.hpp +7 -4
- data/ext/oxt/system_calls.cpp +5 -1
- data/ext/oxt/system_calls.hpp +3 -0
- data/helper-scripts/node-loader.js +117 -249
- data/lib/phusion_passenger.rb +27 -5
- data/lib/phusion_passenger/abstract_installer.rb +104 -9
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
- data/lib/phusion_passenger/apache2/config_options.rb +6 -3
- data/lib/phusion_passenger/common_library.rb +7 -1
- data/lib/phusion_passenger/constants.rb +6 -0
- data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
- data/lib/phusion_passenger/nginx/config_options.rb +2 -1
- data/lib/phusion_passenger/packaging.rb +3 -0
- data/lib/phusion_passenger/platform_info/apache.rb +43 -6
- data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
- data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
- data/lib/phusion_passenger/platform_info/linux.rb +2 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
- data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
- data/lib/phusion_passenger/standalone/start_command.rb +8 -2
- data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
- data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
- data/node_lib/phusion_passenger/line_reader.js +154 -0
- data/node_lib/phusion_passenger/request_handler.js +65 -0
- data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
- data/resources/templates/apache2/deployment_example.txt.erb +2 -1
- data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
- data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
- data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/general_error_with_html.html.template +1 -1
- data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
- data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
- data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
- data/resources/templates/nginx/deployment_example.txt.erb +2 -1
- data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
- data/test/cxx/EventedBufferedInputTest.cpp +6 -6
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/MessagePassingTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +4 -4
- data/test/cxx/RequestHandlerTest.cpp +7 -7
- data/test/cxx/UnionStationTest.cpp +2 -2
- data/test/node/line_reader_spec.js +338 -0
- data/test/node/spec_helper.js +27 -0
- data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
- metadata +131 -22
- metadata.gz.asc +7 -7
- data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
- data/ext/boost/lambda/core.hpp +0 -79
- data/ext/boost/lambda/detail/actions.hpp +0 -174
- data/ext/boost/lambda/detail/arity_code.hpp +0 -110
- data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
- data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
- data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
- data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
- data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
- data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
- data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
- data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
- data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
- data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
- data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
- data/ext/boost/lambda/detail/operators.hpp +0 -370
- data/ext/boost/lambda/detail/ret.hpp +0 -325
- data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
- data/ext/boost/lambda/detail/select_functions.hpp +0 -74
- data/ext/boost/lambda/lambda.hpp +0 -34
@@ -0,0 +1,55 @@
|
|
1
|
+
#ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED
|
2
|
+
#define BOOST_POINTER_TO_OTHER_HPP_INCLUDED
|
3
|
+
|
4
|
+
//
|
5
|
+
// pointer_to_other.hpp
|
6
|
+
//
|
7
|
+
// (C) Copyright Ion Gaztanaga 2005.
|
8
|
+
// Copyright (c) 2005 Peter Dimov.
|
9
|
+
//
|
10
|
+
// Distributed under the Boost Software License, Version 1.0.
|
11
|
+
//
|
12
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
13
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
14
|
+
//
|
15
|
+
// See http://www.boost.org/libs/smart_ptr/pointer_to_other.html
|
16
|
+
//
|
17
|
+
|
18
|
+
namespace boost
|
19
|
+
{
|
20
|
+
|
21
|
+
// Defines the same pointer type (raw or smart) to another pointee type
|
22
|
+
|
23
|
+
template<class T, class U>
|
24
|
+
struct pointer_to_other;
|
25
|
+
|
26
|
+
template<class T, class U,
|
27
|
+
template<class> class Sp>
|
28
|
+
struct pointer_to_other< Sp<T>, U >
|
29
|
+
{
|
30
|
+
typedef Sp<U> type;
|
31
|
+
};
|
32
|
+
|
33
|
+
template<class T, class T2, class U,
|
34
|
+
template<class, class> class Sp>
|
35
|
+
struct pointer_to_other< Sp<T, T2>, U >
|
36
|
+
{
|
37
|
+
typedef Sp<U, T2> type;
|
38
|
+
};
|
39
|
+
|
40
|
+
template<class T, class T2, class T3, class U,
|
41
|
+
template<class, class, class> class Sp>
|
42
|
+
struct pointer_to_other< Sp<T, T2, T3>, U >
|
43
|
+
{
|
44
|
+
typedef Sp<U, T2, T3> type;
|
45
|
+
};
|
46
|
+
|
47
|
+
template<class T, class U>
|
48
|
+
struct pointer_to_other< T*, U >
|
49
|
+
{
|
50
|
+
typedef U* type;
|
51
|
+
};
|
52
|
+
|
53
|
+
} // namespace boost
|
54
|
+
|
55
|
+
#endif // #ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED
|
@@ -330,8 +330,8 @@ namespace boost {
|
|
330
330
|
struct BidirectionalRangeConcept : ForwardRangeConcept<T>
|
331
331
|
{
|
332
332
|
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
333
|
-
BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::iterator>));
|
334
|
-
BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::const_iterator>));
|
333
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::iterator>));
|
334
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::const_iterator>));
|
335
335
|
#endif
|
336
336
|
};
|
337
337
|
|
@@ -348,8 +348,8 @@ namespace boost {
|
|
348
348
|
struct RandomAccessRangeConcept : BidirectionalRangeConcept<T>
|
349
349
|
{
|
350
350
|
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
351
|
-
BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::iterator>));
|
352
|
-
BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::const_iterator>));
|
351
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::iterator>));
|
352
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::const_iterator>));
|
353
353
|
#endif
|
354
354
|
};
|
355
355
|
|
data/ext/boost/range/empty.hpp
CHANGED
@@ -21,7 +21,9 @@
|
|
21
21
|
#include <boost/assert.hpp>
|
22
22
|
#include <boost/iterator/iterator_traits.hpp>
|
23
23
|
#include <boost/iterator/iterator_facade.hpp>
|
24
|
+
#include <boost/mpl/or.hpp>
|
24
25
|
#include <boost/type_traits/is_abstract.hpp>
|
26
|
+
#include <boost/type_traits/is_array.hpp>
|
25
27
|
#include <boost/type_traits/is_pointer.hpp>
|
26
28
|
#include <boost/range/functions.hpp>
|
27
29
|
#include <boost/range/iterator.hpp>
|
@@ -167,7 +169,8 @@ namespace boost
|
|
167
169
|
|
168
170
|
private: // for return value of operator()()
|
169
171
|
typedef BOOST_DEDUCED_TYPENAME
|
170
|
-
boost::mpl::if_< boost::is_abstract<value_type>,
|
172
|
+
boost::mpl::if_< boost::mpl::or_< boost::is_abstract< value_type >,
|
173
|
+
boost::is_array< value_type > >,
|
171
174
|
reference, value_type >::type abstract_value_type;
|
172
175
|
|
173
176
|
public:
|
@@ -48,7 +48,7 @@ namespace boost
|
|
48
48
|
|
49
49
|
//! iterator_range output operator
|
50
50
|
/*!
|
51
|
-
Output the range to an ostream. Elements are
|
51
|
+
Output the range to an ostream. Elements are outputted
|
52
52
|
in a sequence without separators.
|
53
53
|
*/
|
54
54
|
template< typename IteratorT, typename Elem, typename Traits >
|
@@ -67,7 +67,7 @@ namespace boost
|
|
67
67
|
|
68
68
|
//! iterator_range output operator
|
69
69
|
/*!
|
70
|
-
Output the range to an ostream. Elements are
|
70
|
+
Output the range to an ostream. Elements are outputted
|
71
71
|
in a sequence without separators.
|
72
72
|
*/
|
73
73
|
template< typename IteratorT >
|
data/ext/boost/ratio/config.hpp
CHANGED
@@ -49,6 +49,12 @@
|
|
49
49
|
#define BOOST_RATIO_INTMAX_C(a) a##LL
|
50
50
|
#endif
|
51
51
|
|
52
|
+
#ifdef UINTMAX_C
|
53
|
+
#define BOOST_RATIO_UINTMAX_C(a) UINTMAX_C(a)
|
54
|
+
#else
|
55
|
+
#define BOOST_RATIO_UINTMAX_C(a) a##ULL
|
56
|
+
#endif
|
57
|
+
|
52
58
|
#define BOOST_RATIO_INTMAX_T_MAX (0x7FFFFFFFFFFFFFFELL)
|
53
59
|
|
54
60
|
|
@@ -133,7 +133,7 @@ namespace ratio_detail
|
|
133
133
|
class br_mul
|
134
134
|
{
|
135
135
|
static const boost::intmax_t nan =
|
136
|
-
|
136
|
+
boost::intmax_t(BOOST_RATIO_UINTMAX_C(1) << (sizeof(boost::intmax_t) * CHAR_BIT - 1));
|
137
137
|
static const boost::intmax_t min = boost::integer_traits<boost::intmax_t>::const_min;
|
138
138
|
static const boost::intmax_t max = boost::integer_traits<boost::intmax_t>::const_max;
|
139
139
|
|
@@ -172,7 +172,7 @@ namespace ratio_detail
|
|
172
172
|
template <boost::intmax_t X, boost::intmax_t Y>
|
173
173
|
class br_div
|
174
174
|
{
|
175
|
-
static const boost::intmax_t nan = (
|
175
|
+
static const boost::intmax_t nan = boost::intmax_t(BOOST_RATIO_UINTMAX_C(1) << (sizeof(boost::intmax_t) * CHAR_BIT - 1));
|
176
176
|
static const boost::intmax_t min = boost::integer_traits<boost::intmax_t>::const_min;
|
177
177
|
static const boost::intmax_t max = boost::integer_traits<boost::intmax_t>::const_max;
|
178
178
|
|
@@ -0,0 +1,250 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2012 Glen Joseph Fernandes
|
3
|
+
* glenfe at live dot com
|
4
|
+
*
|
5
|
+
* Distributed under the Boost Software License,
|
6
|
+
* Version 1.0. (See accompanying file LICENSE_1_0.txt
|
7
|
+
* or copy at http://boost.org/LICENSE_1_0.txt)
|
8
|
+
*/
|
9
|
+
#ifndef BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
|
10
|
+
#define BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
|
11
|
+
|
12
|
+
#include <boost/smart_ptr/shared_ptr.hpp>
|
13
|
+
#include <boost/smart_ptr/detail/allocate_array_helper.hpp>
|
14
|
+
#include <boost/smart_ptr/detail/array_deleter.hpp>
|
15
|
+
#include <boost/smart_ptr/detail/array_traits.hpp>
|
16
|
+
#include <boost/smart_ptr/detail/sp_if_array.hpp>
|
17
|
+
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
18
|
+
#include <initializer_list>
|
19
|
+
#endif
|
20
|
+
|
21
|
+
namespace boost {
|
22
|
+
template<typename T, typename A>
|
23
|
+
inline typename boost::detail::sp_if_array<T>::type
|
24
|
+
allocate_shared(const A& allocator, std::size_t size) {
|
25
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
26
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
27
|
+
T1* p1 = 0;
|
28
|
+
T2* p2 = 0;
|
29
|
+
std::size_t n1 = size * boost::detail::array_total<T1>::size;
|
30
|
+
boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
|
31
|
+
boost::detail::array_deleter<T2[]> d1(n1);
|
32
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
33
|
+
typedef boost::detail::array_deleter<T2[]>* D2;
|
34
|
+
p1 = reinterpret_cast<T1*>(p2);
|
35
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
36
|
+
d2->init(p2);
|
37
|
+
return boost::shared_ptr<T>(s1, p1);
|
38
|
+
}
|
39
|
+
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
40
|
+
template<typename T, typename A, typename... Args>
|
41
|
+
inline typename boost::detail::sp_if_array<T>::type
|
42
|
+
allocate_shared(const A& allocator, std::size_t size, Args&&... args) {
|
43
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
44
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
45
|
+
T1* p1 = 0;
|
46
|
+
T2* p2 = 0;
|
47
|
+
std::size_t n1 = size * boost::detail::array_total<T1>::size;
|
48
|
+
boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
|
49
|
+
boost::detail::array_deleter<T2[]> d1(n1);
|
50
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
51
|
+
typedef boost::detail::array_deleter<T2[]>* D2;
|
52
|
+
p1 = reinterpret_cast<T1*>(p2);
|
53
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
54
|
+
d2->init(p2, boost::detail::sp_forward<Args>(args)...);
|
55
|
+
return boost::shared_ptr<T>(s1, p1);
|
56
|
+
}
|
57
|
+
template<typename T, typename A, typename... Args>
|
58
|
+
inline typename boost::detail::sp_if_size_array<T>::type
|
59
|
+
allocate_shared(const A& allocator, Args&&... args) {
|
60
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
61
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
62
|
+
enum {
|
63
|
+
N = boost::detail::array_total<T>::size
|
64
|
+
};
|
65
|
+
T1* p1 = 0;
|
66
|
+
T2* p2 = 0;
|
67
|
+
boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
|
68
|
+
boost::detail::array_deleter<T2[N]> d1;
|
69
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
70
|
+
typedef boost::detail::array_deleter<T2[N]>* D2;
|
71
|
+
p1 = reinterpret_cast<T1*>(p2);
|
72
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
73
|
+
d2->init(p2, boost::detail::sp_forward<Args>(args)...);
|
74
|
+
return boost::shared_ptr<T>(s1, p1);
|
75
|
+
}
|
76
|
+
#endif
|
77
|
+
#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
|
78
|
+
template<typename T, typename A>
|
79
|
+
inline typename boost::detail::sp_if_size_array<T>::type
|
80
|
+
allocate_shared(const A& allocator, const T& list) {
|
81
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
82
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
83
|
+
typedef const T2 T3;
|
84
|
+
enum {
|
85
|
+
N = boost::detail::array_total<T>::size
|
86
|
+
};
|
87
|
+
T1* p1 = 0;
|
88
|
+
T2* p2 = 0;
|
89
|
+
T3* p3 = 0;
|
90
|
+
boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
|
91
|
+
boost::detail::array_deleter<T2[N]> d1;
|
92
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
93
|
+
typedef boost::detail::array_deleter<T2[N]>* D2;
|
94
|
+
p3 = reinterpret_cast<T3*>(list);
|
95
|
+
p1 = reinterpret_cast<T1*>(p2);
|
96
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
97
|
+
d2->init_list(p2, p3);
|
98
|
+
return boost::shared_ptr<T>(s1, p1);
|
99
|
+
}
|
100
|
+
template<typename T, typename A>
|
101
|
+
inline typename boost::detail::sp_if_array<T>::type
|
102
|
+
allocate_shared(const A& allocator, std::size_t size,
|
103
|
+
const typename boost::detail::array_inner<T>::type& list) {
|
104
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
105
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
106
|
+
typedef const T2 T3;
|
107
|
+
enum {
|
108
|
+
M = boost::detail::array_total<T1>::size
|
109
|
+
};
|
110
|
+
T1* p1 = 0;
|
111
|
+
T2* p2 = 0;
|
112
|
+
T3* p3 = 0;
|
113
|
+
std::size_t n1 = M * size;
|
114
|
+
boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
|
115
|
+
boost::detail::array_deleter<T2[]> d1(n1);
|
116
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
117
|
+
typedef boost::detail::array_deleter<T2[]>* D2;
|
118
|
+
p3 = reinterpret_cast<T3*>(list);
|
119
|
+
p1 = reinterpret_cast<T1*>(p2);
|
120
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
121
|
+
d2->template init_list<M>(p2, p3);
|
122
|
+
return boost::shared_ptr<T>(s1, p1);
|
123
|
+
}
|
124
|
+
template<typename T, typename A>
|
125
|
+
inline typename boost::detail::sp_if_size_array<T>::type
|
126
|
+
allocate_shared(const A& allocator,
|
127
|
+
const typename boost::detail::array_inner<T>::type& list) {
|
128
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
129
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
130
|
+
typedef const T2 T3;
|
131
|
+
enum {
|
132
|
+
M = boost::detail::array_total<T1>::size,
|
133
|
+
N = boost::detail::array_total<T>::size
|
134
|
+
};
|
135
|
+
T1* p1 = 0;
|
136
|
+
T2* p2 = 0;
|
137
|
+
T3* p3 = 0;
|
138
|
+
boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
|
139
|
+
boost::detail::array_deleter<T2[N]> d1;
|
140
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
141
|
+
typedef boost::detail::array_deleter<T2[N]>* D2;
|
142
|
+
p3 = reinterpret_cast<T3*>(list);
|
143
|
+
p1 = reinterpret_cast<T1*>(p2);
|
144
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
145
|
+
d2->template init_list<M>(p2, p3);
|
146
|
+
return boost::shared_ptr<T>(s1, p1);
|
147
|
+
}
|
148
|
+
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
149
|
+
template<typename T, typename A>
|
150
|
+
inline typename boost::detail::sp_if_array<T>::type
|
151
|
+
allocate_shared(const A& allocator,
|
152
|
+
std::initializer_list<typename boost::detail::array_inner<T>::type> list) {
|
153
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
154
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
155
|
+
typedef const T2 T3;
|
156
|
+
T1* p1 = 0;
|
157
|
+
T2* p2 = 0;
|
158
|
+
T3* p3 = 0;
|
159
|
+
std::size_t n1 = list.size() * boost::detail::array_total<T1>::size;
|
160
|
+
boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
|
161
|
+
boost::detail::array_deleter<T2[]> d1(n1);
|
162
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
163
|
+
typedef boost::detail::array_deleter<T2[]>* D2;
|
164
|
+
p3 = reinterpret_cast<T3*>(list.begin());
|
165
|
+
p1 = reinterpret_cast<T1*>(p2);
|
166
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
167
|
+
d2->init_list(p2, p3);
|
168
|
+
return boost::shared_ptr<T>(s1, p1);
|
169
|
+
}
|
170
|
+
#endif
|
171
|
+
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
172
|
+
template<typename T, typename A>
|
173
|
+
inline typename boost::detail::sp_if_array<T>::type
|
174
|
+
allocate_shared(const A& allocator, std::size_t size,
|
175
|
+
typename boost::detail::array_base<T>::type&& value) {
|
176
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
177
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
178
|
+
T1* p1 = 0;
|
179
|
+
T2* p2 = 0;
|
180
|
+
std::size_t n1 = size * boost::detail::array_total<T1>::size;
|
181
|
+
boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
|
182
|
+
boost::detail::array_deleter<T2[]> d1(n1);
|
183
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
184
|
+
typedef boost::detail::array_deleter<T2[]>* D2;
|
185
|
+
p1 = reinterpret_cast<T1*>(p2);
|
186
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
187
|
+
d2->init(p2, boost::detail::sp_forward<T2>(value));
|
188
|
+
return boost::shared_ptr<T>(s1, p1);
|
189
|
+
}
|
190
|
+
template<typename T, typename A>
|
191
|
+
inline typename boost::detail::sp_if_size_array<T>::type
|
192
|
+
allocate_shared(const A& allocator,
|
193
|
+
typename boost::detail::array_base<T>::type&& value) {
|
194
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
195
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
196
|
+
enum {
|
197
|
+
N = boost::detail::array_total<T>::size
|
198
|
+
};
|
199
|
+
T1* p1 = 0;
|
200
|
+
T2* p2 = 0;
|
201
|
+
boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
|
202
|
+
boost::detail::array_deleter<T2[N]> d1;
|
203
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
204
|
+
typedef boost::detail::array_deleter<T2[N]>* D2;
|
205
|
+
p1 = reinterpret_cast<T1*>(p2);
|
206
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
207
|
+
d2->init(p2, boost::detail::sp_forward<T2>(value));
|
208
|
+
return boost::shared_ptr<T>(s1, p1);
|
209
|
+
}
|
210
|
+
#endif
|
211
|
+
#endif
|
212
|
+
template<typename T, typename A>
|
213
|
+
inline typename boost::detail::sp_if_array<T>::type
|
214
|
+
allocate_shared_noinit(const A& allocator, std::size_t size) {
|
215
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
216
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
217
|
+
T1* p1 = 0;
|
218
|
+
T2* p2 = 0;
|
219
|
+
std::size_t n1 = size * boost::detail::array_total<T1>::size;
|
220
|
+
boost::detail::allocate_array_helper<A, T2[]> a1(allocator, n1, &p2);
|
221
|
+
boost::detail::array_deleter<T2[]> d1(n1);
|
222
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
223
|
+
typedef boost::detail::array_deleter<T2[]>* D2;
|
224
|
+
p1 = reinterpret_cast<T1*>(p2);
|
225
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
226
|
+
d2->noinit(p2);
|
227
|
+
return boost::shared_ptr<T>(s1, p1);
|
228
|
+
}
|
229
|
+
template<typename T, typename A>
|
230
|
+
inline typename boost::detail::sp_if_size_array<T>::type
|
231
|
+
allocate_shared_noinit(const A& allocator) {
|
232
|
+
typedef typename boost::detail::array_inner<T>::type T1;
|
233
|
+
typedef typename boost::detail::array_base<T1>::type T2;
|
234
|
+
enum {
|
235
|
+
N = boost::detail::array_total<T>::size
|
236
|
+
};
|
237
|
+
T1* p1 = 0;
|
238
|
+
T2* p2 = 0;
|
239
|
+
boost::detail::allocate_array_helper<A, T2[N]> a1(allocator, &p2);
|
240
|
+
boost::detail::array_deleter<T2[N]> d1;
|
241
|
+
boost::shared_ptr<T> s1(p1, d1, a1);
|
242
|
+
typedef boost::detail::array_deleter<T2[N]>* D2;
|
243
|
+
p1 = reinterpret_cast<T1*>(p2);
|
244
|
+
D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
|
245
|
+
d2->noinit(p2);
|
246
|
+
return boost::shared_ptr<T>(s1, p1);
|
247
|
+
}
|
248
|
+
}
|
249
|
+
|
250
|
+
#endif
|
@@ -0,0 +1,169 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2012 Glen Joseph Fernandes
|
3
|
+
* glenfe at live dot com
|
4
|
+
*
|
5
|
+
* Distributed under the Boost Software License,
|
6
|
+
* Version 1.0. (See accompanying file LICENSE_1_0.txt
|
7
|
+
* or copy at http://boost.org/LICENSE_1_0.txt)
|
8
|
+
*/
|
9
|
+
#ifndef BOOST_SMART_PTR_DETAIL_ALLOCATE_ARRAY_HELPER_HPP
|
10
|
+
#define BOOST_SMART_PTR_DETAIL_ALLOCATE_ARRAY_HELPER_HPP
|
11
|
+
|
12
|
+
#include <boost/type_traits/alignment_of.hpp>
|
13
|
+
|
14
|
+
namespace boost {
|
15
|
+
namespace detail {
|
16
|
+
template<typename A, typename T, typename Y = char>
|
17
|
+
class allocate_array_helper;
|
18
|
+
template<typename A, typename T, typename Y>
|
19
|
+
class allocate_array_helper<A, T[], Y> {
|
20
|
+
template<typename A9, typename T9, typename Y9>
|
21
|
+
friend class allocate_array_helper;
|
22
|
+
typedef typename A::template rebind<Y> ::other A2;
|
23
|
+
typedef typename A::template rebind<char>::other A3;
|
24
|
+
public:
|
25
|
+
typedef typename A2::value_type value_type;
|
26
|
+
typedef typename A2::pointer pointer;
|
27
|
+
typedef typename A2::const_pointer const_pointer;
|
28
|
+
typedef typename A2::reference reference;
|
29
|
+
typedef typename A2::const_reference const_reference;
|
30
|
+
typedef typename A2::size_type size_type;
|
31
|
+
typedef typename A2::difference_type difference_type;
|
32
|
+
template<typename U>
|
33
|
+
struct rebind {
|
34
|
+
typedef allocate_array_helper<A, T[], U> other;
|
35
|
+
};
|
36
|
+
allocate_array_helper(const A& allocator_, std::size_t size_, T** data_)
|
37
|
+
: allocator(allocator_),
|
38
|
+
size(sizeof(T) * size_),
|
39
|
+
data(data_) {
|
40
|
+
}
|
41
|
+
template<class U>
|
42
|
+
allocate_array_helper(const allocate_array_helper<A, T[], U>& other)
|
43
|
+
: allocator(other.allocator),
|
44
|
+
size(other.size),
|
45
|
+
data(other.data) {
|
46
|
+
}
|
47
|
+
pointer address(reference value) const {
|
48
|
+
return allocator.address(value);
|
49
|
+
}
|
50
|
+
const_pointer address(const_reference value) const {
|
51
|
+
return allocator.address(value);
|
52
|
+
}
|
53
|
+
size_type max_size() const {
|
54
|
+
return allocator.max_size();
|
55
|
+
}
|
56
|
+
pointer allocate(size_type count, const void* value = 0) {
|
57
|
+
std::size_t a1 = boost::alignment_of<T>::value;
|
58
|
+
std::size_t n1 = count * sizeof(Y) + a1 - 1;
|
59
|
+
char* p1 = A3(allocator).allocate(n1 + size, value);
|
60
|
+
char* p2 = p1 + n1;
|
61
|
+
while (std::size_t(p2) % a1 != 0) {
|
62
|
+
p2--;
|
63
|
+
}
|
64
|
+
*data = reinterpret_cast<T*>(p2);
|
65
|
+
return reinterpret_cast<Y*>(p1);
|
66
|
+
}
|
67
|
+
void deallocate(pointer memory, size_type count) {
|
68
|
+
std::size_t a1 = boost::alignment_of<T>::value;
|
69
|
+
std::size_t n1 = count * sizeof(Y) + a1 - 1;
|
70
|
+
char* p1 = reinterpret_cast<char*>(memory);
|
71
|
+
A3(allocator).deallocate(p1, n1 + size);
|
72
|
+
}
|
73
|
+
void construct(pointer memory, const Y& value) {
|
74
|
+
allocator.construct(memory, value);
|
75
|
+
}
|
76
|
+
void destroy(pointer memory) {
|
77
|
+
allocator.destroy(memory);
|
78
|
+
}
|
79
|
+
template<typename U>
|
80
|
+
bool operator==(const allocate_array_helper<A, T[], U>& other) const {
|
81
|
+
return allocator == other.allocator;
|
82
|
+
}
|
83
|
+
template<typename U>
|
84
|
+
bool operator!=(const allocate_array_helper<A, T[], U>& other) const {
|
85
|
+
return !(*this == other);
|
86
|
+
}
|
87
|
+
private:
|
88
|
+
A2 allocator;
|
89
|
+
std::size_t size;
|
90
|
+
T** data;
|
91
|
+
};
|
92
|
+
template<typename A, typename T, std::size_t N, typename Y>
|
93
|
+
class allocate_array_helper<A, T[N], Y> {
|
94
|
+
template<typename A9, typename T9, typename Y9>
|
95
|
+
friend class allocate_array_helper;
|
96
|
+
typedef typename A::template rebind<Y> ::other A2;
|
97
|
+
typedef typename A::template rebind<char>::other A3;
|
98
|
+
public:
|
99
|
+
typedef typename A2::value_type value_type;
|
100
|
+
typedef typename A2::pointer pointer;
|
101
|
+
typedef typename A2::const_pointer const_pointer;
|
102
|
+
typedef typename A2::reference reference;
|
103
|
+
typedef typename A2::const_reference const_reference;
|
104
|
+
typedef typename A2::size_type size_type;
|
105
|
+
typedef typename A2::difference_type difference_type;
|
106
|
+
template<typename U>
|
107
|
+
struct rebind {
|
108
|
+
typedef allocate_array_helper<A, T[N], U> other;
|
109
|
+
};
|
110
|
+
allocate_array_helper(const A& allocator_, T** data_)
|
111
|
+
: allocator(allocator_),
|
112
|
+
data(data_) {
|
113
|
+
}
|
114
|
+
template<class U>
|
115
|
+
allocate_array_helper(const allocate_array_helper<A, T[N], U>& other)
|
116
|
+
: allocator(other.allocator),
|
117
|
+
data(other.data) {
|
118
|
+
}
|
119
|
+
pointer address(reference value) const {
|
120
|
+
return allocator.address(value);
|
121
|
+
}
|
122
|
+
const_pointer address(const_reference value) const {
|
123
|
+
return allocator.address(value);
|
124
|
+
}
|
125
|
+
size_type max_size() const {
|
126
|
+
return allocator.max_size();
|
127
|
+
}
|
128
|
+
pointer allocate(size_type count, const void* value = 0) {
|
129
|
+
std::size_t a1 = boost::alignment_of<T>::value;
|
130
|
+
std::size_t n1 = count * sizeof(Y) + a1 - 1;
|
131
|
+
char* p1 = A3(allocator).allocate(n1 + N1, value);
|
132
|
+
char* p2 = p1 + n1;
|
133
|
+
while (std::size_t(p2) % a1 != 0) {
|
134
|
+
p2--;
|
135
|
+
}
|
136
|
+
*data = reinterpret_cast<T*>(p2);
|
137
|
+
return reinterpret_cast<Y*>(p1);
|
138
|
+
}
|
139
|
+
void deallocate(pointer memory, size_type count) {
|
140
|
+
std::size_t a1 = boost::alignment_of<T>::value;
|
141
|
+
std::size_t n1 = count * sizeof(Y) + a1 - 1;
|
142
|
+
char* p1 = reinterpret_cast<char*>(memory);
|
143
|
+
A3(allocator).deallocate(p1, n1 + N1);
|
144
|
+
}
|
145
|
+
void construct(pointer memory, const Y& value) {
|
146
|
+
allocator.construct(memory, value);
|
147
|
+
}
|
148
|
+
void destroy(pointer memory) {
|
149
|
+
allocator.destroy(memory);
|
150
|
+
}
|
151
|
+
template<typename U>
|
152
|
+
bool operator==(const allocate_array_helper<A, T[N], U>& other) const {
|
153
|
+
return allocator == other.allocator;
|
154
|
+
}
|
155
|
+
template<typename U>
|
156
|
+
bool operator!=(const allocate_array_helper<A, T[N], U>& other) const {
|
157
|
+
return !(*this == other);
|
158
|
+
}
|
159
|
+
private:
|
160
|
+
enum {
|
161
|
+
N1 = N * sizeof(T)
|
162
|
+
};
|
163
|
+
A2 allocator;
|
164
|
+
T** data;
|
165
|
+
};
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
#endif
|