passenger 6.0.22 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +59 -1
- data/Rakefile +13 -2
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +18 -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 +24 -13
- data/package.json +1 -1
- data/passenger.gemspec +4 -2
- data/resources/templates/standalone/server.erb +1 -0
- 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 +9 -1
- 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 -4
- 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 +8 -3
- data/src/agent/Core/Controller/CheckoutSession.cpp +24 -1
- data/src/agent/Core/Controller/Config.h +5 -1
- data/src/agent/Core/Controller.h +1 -0
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/OptionParser.h +3 -0
- data/src/agent/Core/SpawningKit/ErrorRenderer.h +5 -0
- 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 +2 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +15 -0
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
- data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +13 -0
- data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +16 -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/LString.h +4 -0
- 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/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
- data/src/nginx_module/Configuration.c +7 -2
- data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +6 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +14 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
- data/src/ruby_native_extension/passenger_native_support.c +1 -0
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +5 -0
- 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/nginx/config_options.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
- data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +30 -56
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
- data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +39 -10
data/passenger.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
source_root = File.expand_path(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift("#{source_root}/src/ruby_supportlib")
|
3
|
+
require 'rubygems'
|
3
4
|
require 'phusion_passenger'
|
4
5
|
PhusionPassenger.locate_directories
|
5
6
|
PhusionPassenger.require_passenger_lib 'packaging'
|
@@ -22,8 +23,9 @@ Gem::Specification.new do |s|
|
|
22
23
|
"mailing_list_uri" => "https://www.phusionpassenger.com/contact",
|
23
24
|
"wiki_uri" => "https://github.com/phusion/passenger/wiki"
|
24
25
|
}
|
25
|
-
s.add_dependency 'rake', '>=
|
26
|
-
s.add_dependency 'rack'
|
26
|
+
s.add_dependency 'rake', '>= 12.3.3'
|
27
|
+
s.add_dependency 'rack', '>= 1.6.13'
|
28
|
+
s.add_dependency 'rackup', '>= 2.0.0'
|
27
29
|
s.files = Dir[*PhusionPassenger::Packaging::GLOB] -
|
28
30
|
Dir[*PhusionPassenger::Packaging::EXCLUDE_GLOB]
|
29
31
|
s.executables = PhusionPassenger::Packaging::USER_EXECUTABLES +
|
@@ -55,6 +55,7 @@ passenger_enabled on;
|
|
55
55
|
<%= nginx_option(app, :preload_bundler) %>
|
56
56
|
<%= nginx_option(app, :app_file_descriptor_ulimit) %>
|
57
57
|
<%= nginx_option(app, :friendly_error_pages) %>
|
58
|
+
<%= nginx_option(app, :custom_error_page) %>
|
58
59
|
<%= nginx_option(app, :abort_websockets_on_process_shutdown) %>
|
59
60
|
<%= nginx_option(app, :force_max_concurrent_requests_per_process) %>
|
60
61
|
<%= nginx_option(app, :max_requests) %>
|
@@ -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_INITIALIZATION_AND_SHUTDOWN_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_INITIALIZATION_AND_SHUTDOWN_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -179,3 +185,5 @@ Group::shutdown(const Callback &callback,
|
|
179
185
|
|
180
186
|
} // namespace ApplicationPool2
|
181
187
|
} // namespace Passenger
|
188
|
+
|
189
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_INITIALIZATION_AND_SHUTDOWN_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_INTERNAL_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_INTERNAL_UTILS_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -178,7 +184,7 @@ Group::createNullProcessObject() {
|
|
178
184
|
LockGuard l(context->memoryManagementSyncher);
|
179
185
|
Process *process = context->processObjectPool.malloc();
|
180
186
|
Guard guard(context, process);
|
181
|
-
process = new (process) Process(&info, args);
|
187
|
+
process = new (process) Process(&info, info.group->restartsInitiated, args);
|
182
188
|
process->shutdownNotRequired();
|
183
189
|
guard.clear();
|
184
190
|
return ProcessPtr(process, false);
|
@@ -215,7 +221,7 @@ Group::createProcessObject(const SpawningKit::Spawner &spawner,
|
|
215
221
|
LockGuard l(context->memoryManagementSyncher);
|
216
222
|
Process *process = context->processObjectPool.malloc();
|
217
223
|
Guard guard(context, process);
|
218
|
-
process = new (process) Process(&info, spawnResult, args);
|
224
|
+
process = new (process) Process(&info, info.group->restartsInitiated, spawnResult, args);
|
219
225
|
guard.clear();
|
220
226
|
return ProcessPtr(process, false);
|
221
227
|
}
|
@@ -374,3 +380,5 @@ Group::callAbortLongRunningConnectionsCallback(const ProcessPtr &process) {
|
|
374
380
|
|
375
381
|
} // namespace ApplicationPool2
|
376
382
|
} // namespace Passenger
|
383
|
+
|
384
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_INTERNAL_UTILS_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_LIFETIME_AND_BASICS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_LIFETIME_AND_BASICS_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -107,3 +113,5 @@ Group::getWrapperRegistry() const {
|
|
107
113
|
|
108
114
|
} // namespace ApplicationPool2
|
109
115
|
} // namespace Passenger
|
116
|
+
|
117
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_LIFETIME_AND_BASICS_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_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>
|
@@ -291,7 +297,7 @@ Group::inspectConfigInAdminPanelFormat(Json::Value &result) const {
|
|
291
297
|
result["environment_variables"] = VAL(Json::objectValue, Json::objectValue);
|
292
298
|
}
|
293
299
|
|
294
|
-
// Missing: sticky_sessions, sticky_session_cookie_name, friendly_error_pages
|
300
|
+
// Missing: sticky_sessions, sticky_session_cookie_name, friendly_error_pages, custom_error_page
|
295
301
|
|
296
302
|
/******************/
|
297
303
|
|
@@ -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,15 +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);
|
84
|
-
#
|
85
|
-
#pragma clang diagnostic ignored "-Wformat-truncation"
|
87
|
+
#ifndef __clang__
|
86
88
|
#pragma GCC diagnostic push
|
87
89
|
#pragma GCC diagnostic ignored "-Wformat-truncation"
|
88
|
-
|
90
|
+
#endif
|
91
|
+
// GCC warns about format-truncation here, but no one has 9.3PB RAM
|
92
|
+
// So we can safely ignore this warning.
|
89
93
|
snprintf(membuf, sizeof(membuf), "%ldM",
|
90
94
|
(unsigned long) (process->metrics.realMemory() / 1024));
|
95
|
+
#ifndef __clang__
|
91
96
|
#pragma GCC diagnostic pop
|
92
|
-
#
|
97
|
+
#endif
|
93
98
|
} else {
|
94
99
|
snprintf(cpubuf, sizeof(cpubuf), "0%%");
|
95
100
|
snprintf(membuf, sizeof(membuf), "0M");
|
@@ -434,3 +439,5 @@ Pool::getGroupCount() const {
|
|
434
439
|
|
435
440
|
} // namespace ApplicationPool2
|
436
441
|
} // namespace Passenger
|
442
|
+
|
443
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|