passenger 6.0.23 → 6.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +26 -1
- data/Rakefile +7 -3
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +17 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +4 -12
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +7 -3
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +21 -8
@@ -23,6 +23,13 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
|
27
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_MISCELLANEOUS_CPP_
|
28
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_MISCELLANEOUS_CPP_
|
29
|
+
|
30
|
+
#ifdef INTELLISENSE
|
31
|
+
#include <Core/ApplicationPool/Pool.h>
|
32
|
+
#endif
|
26
33
|
#include <Core/ApplicationPool/Group.h>
|
27
34
|
|
28
35
|
/*************************************************************************
|
@@ -65,3 +72,5 @@ Group::authorizeByApiKey(const ApiKey &key) const {
|
|
65
72
|
|
66
73
|
} // namespace ApplicationPool2
|
67
74
|
} // namespace Passenger
|
75
|
+
|
76
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_MISCELLANEOUS_CPP_
|
@@ -23,6 +23,13 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
|
27
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_OUT_OF_BAND_WORK_CPP_
|
28
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_OUT_OF_BAND_WORK_CPP_
|
29
|
+
|
30
|
+
#ifdef INTELLISENSE
|
31
|
+
#include <Core/ApplicationPool/Pool.h>
|
32
|
+
#endif
|
26
33
|
#include <Core/ApplicationPool/Group.h>
|
27
34
|
#include <IOTools/MessageSerialization.h>
|
28
35
|
|
@@ -322,3 +329,5 @@ Group::requestOOBW(const ProcessPtr &process) {
|
|
322
329
|
|
323
330
|
} // namespace ApplicationPool2
|
324
331
|
} // namespace Passenger
|
332
|
+
|
333
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_OUT_OF_BAND_WORK_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_PROCESS_LIST_MANAGEMENT_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_PROCESS_LIST_MANAGEMENT_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -57,72 +63,75 @@ Group::findProcessWithStickySessionId(unsigned int id) const {
|
|
57
63
|
return NULL;
|
58
64
|
}
|
59
65
|
|
66
|
+
/**
|
67
|
+
* Return the process with the given sticky session ID if it exists.
|
68
|
+
* If not, then find the "best" enabled process to route a request to,
|
69
|
+
* according to the same criteria documented for findBestProcess().
|
70
|
+
*
|
71
|
+
* - If the process with the given sticky session ID exists, then always
|
72
|
+
* returns that process. Meaning that this process could be `!canBeRoutedTo()`.
|
73
|
+
* - If there is no process that can be routed to, then returns nullptr.
|
74
|
+
*/
|
60
75
|
Process *
|
61
|
-
Group::
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
Process *process = enabledProcesses[i].get();
|
76
|
+
Group::findBestProcessPreferringStickySessionId(unsigned int id) const {
|
77
|
+
Process *bestProcess = nullptr;
|
78
|
+
ProcessList::const_iterator it;
|
79
|
+
ProcessList::const_iterator end = enabledProcesses.end();
|
80
|
+
|
81
|
+
for (it = enabledProcesses.begin(); it != end; it++) {
|
82
|
+
Process *process = it->get();
|
69
83
|
if (process->getStickySessionId() == id) {
|
70
84
|
return process;
|
71
|
-
} else if (
|
72
|
-
|
73
|
-
|
85
|
+
} else if (!process->isTotallyBusy()
|
86
|
+
&& (
|
87
|
+
bestProcess == nullptr
|
88
|
+
|| process->generation > bestProcess->generation
|
89
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime < bestProcess->spawnStartTime)
|
90
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime == bestProcess->spawnStartTime && process->busyness() < bestProcess->busyness())
|
91
|
+
)
|
92
|
+
) {
|
93
|
+
bestProcess = process;
|
74
94
|
}
|
75
95
|
}
|
76
96
|
|
77
|
-
|
78
|
-
return NULL;
|
79
|
-
} else {
|
80
|
-
return enabledProcesses[leastBusyProcessIndex].get();
|
81
|
-
}
|
97
|
+
return bestProcess;
|
82
98
|
}
|
83
99
|
|
100
|
+
/**
|
101
|
+
* Given a ProcessList, find the "best" process to route a request to.
|
102
|
+
* At the moment, "best" is defined as the process with the highest generation,
|
103
|
+
* lowest start time, and lowest busyness, in that order of priority.
|
104
|
+
*
|
105
|
+
* If there is no process that can be routed to, then returns nullptr.
|
106
|
+
*
|
107
|
+
* @post result != nullptr || result.canBeRoutedTo()
|
108
|
+
*/
|
84
109
|
Process *
|
85
|
-
Group::
|
110
|
+
Group::findBestProcess(const ProcessList &processes) const {
|
86
111
|
if (processes.empty()) {
|
87
|
-
return
|
112
|
+
return nullptr;
|
88
113
|
}
|
89
114
|
|
90
|
-
|
91
|
-
Process *leastBusyProcess = NULL;
|
115
|
+
Process *bestProcess = nullptr;
|
92
116
|
ProcessList::const_iterator it;
|
93
117
|
ProcessList::const_iterator end = processes.end();
|
94
|
-
for (it = processes.begin(); it != end; it++) {
|
95
|
-
Process *process = (*it).get();
|
96
|
-
int busyness = process->busyness();
|
97
|
-
if (lowestBusyness == -1 || lowestBusyness > busyness) {
|
98
|
-
lowestBusyness = busyness;
|
99
|
-
leastBusyProcess = process;
|
100
|
-
}
|
101
|
-
}
|
102
|
-
return leastBusyProcess;
|
103
|
-
}
|
104
118
|
|
105
|
-
|
106
|
-
*
|
107
|
-
*/
|
108
|
-
Process *
|
109
|
-
Group::findEnabledProcessWithLowestBusyness() const {
|
110
|
-
if (enabledProcesses.empty()) {
|
111
|
-
return NULL;
|
112
|
-
}
|
113
|
-
|
114
|
-
int leastBusyProcessIndex = -1;
|
115
|
-
int lowestBusyness = 0;
|
116
|
-
unsigned int i, size = enabledProcessBusynessLevels.size();
|
117
|
-
const int *enabledProcessBusynessLevels = &this->enabledProcessBusynessLevels[0];
|
119
|
+
for (it = processes.begin(); it != end; it++) {
|
120
|
+
Process *process = it->get();
|
118
121
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
122
|
+
if (!process->isTotallyBusy()
|
123
|
+
&& (
|
124
|
+
bestProcess == nullptr
|
125
|
+
|| process->generation > bestProcess->generation
|
126
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime < bestProcess->spawnStartTime)
|
127
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime == bestProcess->spawnStartTime && process->busyness() < bestProcess->busyness())
|
128
|
+
)
|
129
|
+
) {
|
130
|
+
bestProcess = process;
|
123
131
|
}
|
124
132
|
}
|
125
|
-
|
133
|
+
|
134
|
+
return bestProcess;
|
126
135
|
}
|
127
136
|
|
128
137
|
/**
|
@@ -222,6 +231,7 @@ void
|
|
222
231
|
Group::removeFromDisableWaitlist(const ProcessPtr &p, DisableResult result,
|
223
232
|
boost::container::vector<Callback> &postLockActions)
|
224
233
|
{
|
234
|
+
const deque<DisableWaiter> &disableWaitlist = this->disableWaitlist;
|
225
235
|
deque<DisableWaiter>::const_iterator it, end = disableWaitlist.end();
|
226
236
|
deque<DisableWaiter> newList;
|
227
237
|
for (it = disableWaitlist.begin(); it != end; it++) {
|
@@ -233,7 +243,7 @@ Group::removeFromDisableWaitlist(const ProcessPtr &p, DisableResult result,
|
|
233
243
|
newList.push_back(waiter);
|
234
244
|
}
|
235
245
|
}
|
236
|
-
disableWaitlist = newList;
|
246
|
+
this->disableWaitlist = newList;
|
237
247
|
}
|
238
248
|
|
239
249
|
void
|
@@ -428,6 +438,7 @@ Group::attach(const ProcessPtr &process,
|
|
428
438
|
/* Now that there are enough resources, relevant processes in
|
429
439
|
* 'disableWaitlist' can be disabled.
|
430
440
|
*/
|
441
|
+
const deque<DisableWaiter> &disableWaitlist = this->disableWaitlist;
|
431
442
|
deque<DisableWaiter>::const_iterator it, end = disableWaitlist.end();
|
432
443
|
deque<DisableWaiter> newDisableWaitlist;
|
433
444
|
for (it = disableWaitlist.begin(); it != end; it++) {
|
@@ -451,7 +462,7 @@ Group::attach(const ProcessPtr &process,
|
|
451
462
|
newDisableWaitlist.push_back(waiter);
|
452
463
|
}
|
453
464
|
}
|
454
|
-
disableWaitlist = newDisableWaitlist;
|
465
|
+
this->disableWaitlist = newDisableWaitlist;
|
455
466
|
|
456
467
|
// Update GC sleep timer.
|
457
468
|
wakeUpGarbageCollector();
|
@@ -616,3 +627,5 @@ Group::disable(const ProcessPtr &process, const DisableCallback &callback) {
|
|
616
627
|
|
617
628
|
} // namespace ApplicationPool2
|
618
629
|
} // namespace Passenger
|
630
|
+
|
631
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_PROCESS_LIST_MANAGEMENT_CPP_
|
@@ -23,7 +23,14 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_SESSION_MANAGEMENT_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_SESSION_MANAGEMENT_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
33
|
+
#include <cassert>
|
27
34
|
|
28
35
|
/*************************************************************************
|
29
36
|
*
|
@@ -58,16 +65,17 @@ Group::RouteResult
|
|
58
65
|
Group::route(const Options &options) const {
|
59
66
|
if (OXT_LIKELY(enabledCount > 0)) {
|
60
67
|
if (options.stickySessionId == 0) {
|
61
|
-
Process *process =
|
62
|
-
if (process
|
68
|
+
Process *process = findBestProcess(enabledProcesses);
|
69
|
+
if (process != nullptr) {
|
70
|
+
assert(process->canBeRoutedTo());
|
63
71
|
return RouteResult(process);
|
64
72
|
} else {
|
65
73
|
return RouteResult(NULL, true);
|
66
74
|
}
|
67
75
|
} else {
|
68
|
-
Process *process =
|
76
|
+
Process *process = findBestProcessPreferringStickySessionId(
|
69
77
|
options.stickySessionId);
|
70
|
-
if (process !=
|
78
|
+
if (process != nullptr) {
|
71
79
|
if (process->canBeRoutedTo()) {
|
72
80
|
return RouteResult(process);
|
73
81
|
} else {
|
@@ -78,8 +86,9 @@ Group::route(const Options &options) const {
|
|
78
86
|
}
|
79
87
|
}
|
80
88
|
} else {
|
81
|
-
Process *process =
|
82
|
-
if (process
|
89
|
+
Process *process = findBestProcess(disablingProcesses);
|
90
|
+
if (process != nullptr) {
|
91
|
+
assert(process->canBeRoutedTo());
|
83
92
|
return RouteResult(process);
|
84
93
|
} else {
|
85
94
|
return RouteResult(NULL, true);
|
@@ -304,9 +313,8 @@ Group::get(const Options &newOptions, const GetCallback &callback,
|
|
304
313
|
assert(m_spawning || restarting() || poolAtFullCapacity());
|
305
314
|
|
306
315
|
if (disablingCount > 0 && !restarting()) {
|
307
|
-
Process *process =
|
308
|
-
|
309
|
-
if (!process->isTotallyBusy()) {
|
316
|
+
Process *process = findBestProcess(disablingProcesses);
|
317
|
+
if (process != nullptr && !process->isTotallyBusy()) {
|
310
318
|
return newSession(process, newOptions.currentTime);
|
311
319
|
}
|
312
320
|
}
|
@@ -336,3 +344,5 @@ Group::get(const Options &newOptions, const GetCallback &callback,
|
|
336
344
|
|
337
345
|
} // namespace ApplicationPool2
|
338
346
|
} // namespace Passenger
|
347
|
+
|
348
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_SESSION_MANAGEMENT_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_SPAWNING_AND_RESTARTING_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_SPAWNING_AND_RESTARTING_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -485,3 +491,5 @@ Group::allowSpawn() const {
|
|
485
491
|
|
486
492
|
} // namespace ApplicationPool2
|
487
493
|
} // namespace Passenger
|
494
|
+
|
495
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_SPAWNING_AND_RESTARTING_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_STATE_INSPECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_STATE_INSPECTION_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
#include <FileTools/PathManip.h>
|
28
34
|
#include <cassert>
|
@@ -303,3 +309,5 @@ Group::inspectConfigInAdminPanelFormat(Json::Value &result) const {
|
|
303
309
|
|
304
310
|
} // namespace ApplicationPool2
|
305
311
|
} // namespace Passenger
|
312
|
+
|
313
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_STATE_INSPECTION_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_VERIFICATION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_VERIFICATION_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -158,3 +164,5 @@ Group::verifyNoRequestsOnGetWaitlistAreRoutable() const {
|
|
158
164
|
|
159
165
|
} // namespace ApplicationPool2
|
160
166
|
} // namespace Passenger
|
167
|
+
|
168
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_VERIFICATION_CPP_
|
@@ -92,8 +92,18 @@ public:
|
|
92
92
|
};
|
93
93
|
|
94
94
|
struct RouteResult {
|
95
|
-
Process
|
96
|
-
|
95
|
+
/** The Process to route the request to, or nullptr if no process can be routed to. */
|
96
|
+
Process * const process;
|
97
|
+
/**
|
98
|
+
* If `process` is nullptr, then `finished` indicates whether another `Group::route()`
|
99
|
+
* call on a different request *could* succeed, meaning that the caller should continue
|
100
|
+
* calling `Group::route()` if there are more queued requests that need to be processed.
|
101
|
+
*
|
102
|
+
* Usually `finished` is false because all processes are totally busy. But in some cases,
|
103
|
+
* for example when using sticky sessions, it could be true because other requests can
|
104
|
+
* potentially be routed to other processes.
|
105
|
+
*/
|
106
|
+
const bool finished;
|
97
107
|
|
98
108
|
RouteResult(Process *p, bool _finished = false)
|
99
109
|
: process(p),
|
@@ -223,9 +233,9 @@ public:
|
|
223
233
|
/****** Process list management ******/
|
224
234
|
|
225
235
|
Process *findProcessWithStickySessionId(unsigned int id) const;
|
226
|
-
Process *
|
227
|
-
Process *
|
228
|
-
Process *
|
236
|
+
Process *findBestProcessPreferringStickySessionId(unsigned int id) const;
|
237
|
+
Process *findBestProcess(const ProcessList &processes) const;
|
238
|
+
Process *findBestEnabledProcess() const;
|
229
239
|
|
230
240
|
void addProcessToList(const ProcessPtr &process, ProcessList &destination);
|
231
241
|
void removeProcessFromList(const ProcessPtr &process, ProcessList &source);
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_ANALYTICS_COLLECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_ANALYTICS_COLLECTION_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -191,3 +194,5 @@ Pool::realCollectAnalytics() {
|
|
191
194
|
|
192
195
|
} // namespace ApplicationPool2
|
193
196
|
} // namespace Passenger
|
197
|
+
|
198
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_ANALYTICS_COLLECTION_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_GARBAGE_COLLECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_GARBAGE_COLLECTION_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -199,3 +202,5 @@ Pool::wakeupGarbageCollector() {
|
|
199
202
|
|
200
203
|
} // namespace ApplicationPool2
|
201
204
|
} // namespace Passenger
|
205
|
+
|
206
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_GARBAGE_COLLECTION_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_GENERAL_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_GENERAL_UTILS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -237,3 +240,5 @@ Pool::getRandomGenerator() const {
|
|
237
240
|
|
238
241
|
} // namespace ApplicationPool2
|
239
242
|
} // namespace Passenger
|
243
|
+
|
244
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_GENERAL_UTILS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_GROUP_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_GROUP_UTILS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -288,3 +291,5 @@ Pool::restartGroupsByAppRoot(const StaticString &appRoot, const RestartOptions &
|
|
288
291
|
|
289
292
|
} // namespace ApplicationPool2
|
290
293
|
} // namespace Passenger
|
294
|
+
|
295
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_GROUP_UTILS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_INITIALIZATION_AND_SHUTDOWN_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_INITIALIZATION_AND_SHUTDOWN_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -140,3 +143,5 @@ Pool::destroy() {
|
|
140
143
|
|
141
144
|
} // namespace ApplicationPool2
|
142
145
|
} // namespace Passenger
|
146
|
+
|
147
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_INITIALIZATION_AND_SHUTDOWN_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_MISCELLANEOUS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_MISCELLANEOUS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -250,3 +253,5 @@ Pool::authorizeByUid(uid_t uid, bool lock) const {
|
|
250
253
|
|
251
254
|
} // namespace ApplicationPool2
|
252
255
|
} // namespace Passenger
|
256
|
+
|
257
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_MISCELLANEOUS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_PROCESS_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_PROCESS_UTILS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -329,3 +332,5 @@ Pool::disableProcess(const StaticString &gupid) {
|
|
329
332
|
|
330
333
|
} // namespace ApplicationPool2
|
331
334
|
} // namespace Passenger
|
335
|
+
|
336
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_PROCESS_UTILS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -81,12 +84,17 @@ Pool::inspectProcessList(const InspectOptions &options, stringstream &result,
|
|
81
84
|
|
82
85
|
if (process->metrics.isValid()) {
|
83
86
|
snprintf(cpubuf, sizeof(cpubuf), "%d%%", (int) process->metrics.cpu);
|
87
|
+
#ifndef __clang__
|
84
88
|
#pragma GCC diagnostic push
|
85
89
|
#pragma GCC diagnostic ignored "-Wformat-truncation"
|
86
|
-
|
90
|
+
#endif
|
91
|
+
// GCC warns about format-truncation here, but no one has 9.3PB RAM
|
92
|
+
// So we can safely ignore this warning.
|
87
93
|
snprintf(membuf, sizeof(membuf), "%ldM",
|
88
94
|
(unsigned long) (process->metrics.realMemory() / 1024));
|
95
|
+
#ifndef __clang__
|
89
96
|
#pragma GCC diagnostic pop
|
97
|
+
#endif
|
90
98
|
} else {
|
91
99
|
snprintf(cpubuf, sizeof(cpubuf), "0%%");
|
92
100
|
snprintf(membuf, sizeof(membuf), "0M");
|
@@ -431,3 +439,5 @@ Pool::getGroupCount() const {
|
|
431
439
|
|
432
440
|
} // namespace ApplicationPool2
|
433
441
|
} // namespace Passenger
|
442
|
+
|
443
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|
@@ -28,7 +28,6 @@
|
|
28
28
|
|
29
29
|
#include <string>
|
30
30
|
#include <vector>
|
31
|
-
#include <algorithm>
|
32
31
|
#include <boost/intrusive_ptr.hpp>
|
33
32
|
#include <boost/move/core.hpp>
|
34
33
|
#include <boost/container/vector.hpp>
|
@@ -54,6 +53,10 @@
|
|
54
53
|
#include <Core/SpawningKit/Result.h>
|
55
54
|
#include <Shared/ApplicationPoolApiKey.h>
|
56
55
|
|
56
|
+
namespace tut {
|
57
|
+
template<class Data> class test_object;
|
58
|
+
}
|
59
|
+
|
57
60
|
namespace Passenger {
|
58
61
|
namespace ApplicationPool2 {
|
59
62
|
|
@@ -100,6 +103,9 @@ typedef boost::container::vector<ProcessPtr> ProcessList;
|
|
100
103
|
*/
|
101
104
|
class Process {
|
102
105
|
public:
|
106
|
+
friend class Group;
|
107
|
+
template<class Data> friend class tut::test_object;
|
108
|
+
|
103
109
|
static const unsigned int MAX_SOCKETS_ACCEPTING_HTTP_REQUESTS = 3;
|
104
110
|
|
105
111
|
private:
|
@@ -337,9 +343,14 @@ private:
|
|
337
343
|
}
|
338
344
|
|
339
345
|
void destroySelf() const {
|
346
|
+
Context *context = getContext();
|
347
|
+
Process *storagePointer = const_cast<Process *>(this);
|
340
348
|
this->~Process();
|
341
|
-
|
342
|
-
|
349
|
+
|
350
|
+
LockGuard l(context->memoryManagementSyncher);
|
351
|
+
// Use `storagePointer` because using `this` after calling the destructor
|
352
|
+
// is undefined behavior.
|
353
|
+
context->processObjectPool.free(storagePointer);
|
343
354
|
}
|
344
355
|
|
345
356
|
|
@@ -384,6 +395,10 @@ public:
|
|
384
395
|
|
385
396
|
/** Last time when a session was opened for this Process. */
|
386
397
|
unsigned long long lastUsed;
|
398
|
+
/** Which generation of app processes this one belongs to,
|
399
|
+
inherited from the app group, incremented when a restart
|
400
|
+
is initiated*/
|
401
|
+
const unsigned int generation;
|
387
402
|
/** Number of sessions currently open.
|
388
403
|
* @invariant session >= 0
|
389
404
|
*/
|
@@ -446,8 +461,7 @@ public:
|
|
446
461
|
/** Collected by Pool::collectAnalytics(). */
|
447
462
|
ProcessMetrics metrics;
|
448
463
|
|
449
|
-
|
450
|
-
Process(const BasicGroupInfo *groupInfo, const Json::Value &args)
|
464
|
+
Process(const BasicGroupInfo *groupInfo, const unsigned int gen, const Json::Value &args)
|
451
465
|
: info(this, groupInfo, args),
|
452
466
|
socketsAcceptingHttpRequestsCount(0),
|
453
467
|
spawnerCreationTime(getJsonUint64Field(args, "spawner_creation_time")),
|
@@ -458,6 +472,7 @@ public:
|
|
458
472
|
refcount(1),
|
459
473
|
index(-1),
|
460
474
|
lastUsed(spawnEndTime),
|
475
|
+
generation(gen),
|
461
476
|
sessions(0),
|
462
477
|
processed(0),
|
463
478
|
lifeStatus(ALIVE),
|
@@ -471,7 +486,7 @@ public:
|
|
471
486
|
indexSocketsAcceptingHttpRequests();
|
472
487
|
}
|
473
488
|
|
474
|
-
Process(const BasicGroupInfo *groupInfo, const SpawningKit::Result &skResult,
|
489
|
+
Process(const BasicGroupInfo *groupInfo, const unsigned int gen, const SpawningKit::Result &skResult,
|
475
490
|
const Json::Value &args)
|
476
491
|
: info(this, groupInfo, skResult),
|
477
492
|
socketsAcceptingHttpRequestsCount(0),
|
@@ -483,6 +498,7 @@ public:
|
|
483
498
|
refcount(1),
|
484
499
|
index(-1),
|
485
500
|
lastUsed(spawnEndTime),
|
501
|
+
generation(gen),
|
486
502
|
sessions(0),
|
487
503
|
processed(0),
|
488
504
|
lifeStatus(ALIVE),
|
@@ -109,9 +109,14 @@ private:
|
|
109
109
|
}
|
110
110
|
|
111
111
|
void destroySelf() const {
|
112
|
+
Context *context = this->context;
|
113
|
+
Session *storagePointer = const_cast<Session *>(this);
|
112
114
|
this->~Session();
|
115
|
+
|
113
116
|
LockGuard l(context->memoryManagementSyncher);
|
114
|
-
|
117
|
+
// Use `storagePointer` because using `this` after calling the destructor
|
118
|
+
// is undefined behavior.
|
119
|
+
context->sessionObjectPool.free(storagePointer);
|
115
120
|
}
|
116
121
|
|
117
122
|
public:
|