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.

Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +26 -1
  3. data/Rakefile +7 -3
  4. data/bin/passenger-install-apache2-module +5 -0
  5. data/bin/passenger-install-nginx-module +17 -2
  6. data/build/apache2.rb +1 -1
  7. data/build/basics.rb +10 -4
  8. data/build/cxx_tests.rb +18 -7
  9. data/build/support/cxx_dependency_map.rb +40 -6
  10. data/build/test_basics.rb +4 -12
  11. data/package.json +1 -1
  12. data/passenger.gemspec +1 -1
  13. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
  14. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
  15. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
  16. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
  17. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
  18. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
  19. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
  20. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
  21. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
  22. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
  23. data/src/agent/Core/ApplicationPool/Group.h +15 -5
  24. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
  25. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
  26. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
  27. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
  28. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
  29. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
  30. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
  31. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
  32. data/src/agent/Core/ApplicationPool/Pool.h +0 -2
  33. data/src/agent/Core/ApplicationPool/Process.h +22 -6
  34. data/src/agent/Core/ApplicationPool/Session.h +6 -1
  35. data/src/agent/Core/Config.h +7 -3
  36. data/src/agent/Core/Controller/Config.h +1 -1
  37. data/src/agent/Core/CoreMain.cpp +10 -17
  38. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
  39. data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
  40. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  41. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
  42. data/src/agent/Core/SpawningKit/Spawner.h +4 -0
  43. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
  44. data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
  45. data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
  46. data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
  47. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
  48. data/src/agent/Watchdog/Config.h +1 -1
  49. data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
  50. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
  51. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
  52. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
  53. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
  54. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
  55. data/src/cxx_supportlib/Constants.h +1 -1
  56. data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
  57. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  58. data/src/cxx_supportlib/SafeLibev.h +1 -3
  59. data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
  60. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
  61. data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
  62. data/src/cxx_supportlib/ServerKit/Server.h +0 -6
  63. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
  64. data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
  65. data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
  66. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
  67. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
  193. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
  196. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
  197. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
  198. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
  200. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
  201. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
  202. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
  204. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
  205. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  206. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
  210. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
  212. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
  216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
  217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
  218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
  220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
  221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
  223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
  226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
  227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
  230. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
  231. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
  233. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
  238. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
  244. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
  245. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
  246. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
  247. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
  248. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
  250. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
  252. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
  258. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  263. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
  264. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
  280. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
  281. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
  282. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
  285. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  296. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  297. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
  298. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
  299. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
  300. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
  301. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
  302. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
  303. data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
  304. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  305. metadata +21 -8
@@ -167,13 +167,13 @@ using namespace std;
167
167
  * security_update_checker_interval unsigned integer - default(86400)
168
168
  * security_update_checker_proxy_url string - -
169
169
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
170
- * server_software string - default("Phusion_Passenger/6.0.23")
170
+ * server_software string - default("Phusion_Passenger/6.0.24")
171
171
  * show_version_in_header boolean - default(true)
172
172
  * single_app_mode_app_root string - default,read_only
173
173
  * single_app_mode_app_start_command string - read_only
174
174
  * single_app_mode_app_type string - read_only
175
175
  * single_app_mode_startup_file string - read_only
176
- * spawn_dir string required read_only
176
+ * spawn_dir string - default,read_only
177
177
  * standalone_engine string - default
178
178
  * stat_throttle_rate unsigned integer - default(10)
179
179
  * telemetry_collector_ca_certificate_path string - -
@@ -240,6 +240,10 @@ private:
240
240
  return 80;
241
241
  }
242
242
 
243
+ static Json::Value getDefaultSpawnDir(const ConfigKit::Store &store) {
244
+ return getSystemTempDir();
245
+ }
246
+
243
247
  static Json::Value getDefaultThreads(const ConfigKit::Store &store) {
244
248
  return Json::UInt(boost::thread::hardware_concurrency());
245
249
  }
@@ -488,7 +492,7 @@ public:
488
492
  overrideWithDynamicDefault("default_server_port", UINT_TYPE, OPTIONAL, getDefaultServerPort);
489
493
 
490
494
  add("passenger_root", STRING_TYPE, REQUIRED | READ_ONLY);
491
- add("spawn_dir", STRING_TYPE, REQUIRED | READ_ONLY);
495
+ addWithDynamicDefault("spawn_dir", STRING_TYPE, OPTIONAL | READ_ONLY | CACHE_DEFAULT_VALUE, getDefaultSpawnDir);
492
496
  add("config_manifest", OBJECT_TYPE, OPTIONAL | READ_ONLY);
493
497
  add("pid_file", STRING_TYPE, OPTIONAL | READ_ONLY);
494
498
  add("web_server_version", STRING_TYPE, OPTIONAL | READ_ONLY);
@@ -117,7 +117,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
117
117
  * multi_app boolean - default(true),read_only
118
118
  * request_freelist_limit unsigned integer - default(1024)
119
119
  * response_buffer_high_watermark unsigned integer - default(134217728)
120
- * server_software string - default("Phusion_Passenger/6.0.23")
120
+ * server_software string - default("Phusion_Passenger/6.0.24")
121
121
  * show_version_in_header boolean - default(true)
122
122
  * start_reading_after_accept boolean - default(true)
123
123
  * stat_throttle_rate unsigned integer - default(10)
@@ -85,7 +85,6 @@
85
85
  #include <AppTypeDetector/Detector.h>
86
86
  #include <IOTools/MessageSerialization.h>
87
87
  #include <FileDescriptor.h>
88
- #include <ResourceLocator.h>
89
88
  #include <BackgroundEventLoop.cpp>
90
89
  #include <FileTools/FileManip.h>
91
90
  #include <FileTools/PathSecurityCheck.h>
@@ -145,7 +144,6 @@ namespace Core {
145
144
 
146
145
  boost::mutex configSyncher;
147
146
 
148
- ResourceLocator resourceLocator;
149
147
  RandomGeneratorPtr randomGenerator;
150
148
  SpawningKit::Context::Schema spawningKitContextSchema;
151
149
  SpawningKit::ContextPtr spawningKitContext;
@@ -697,8 +695,6 @@ initializeNonPrivilegedWorkingObjects() {
697
695
 
698
696
  setenv("SERVER_SOFTWARE", coreConfig->get("server_software").asCString(), 1);
699
697
 
700
- wo->resourceLocator = ResourceLocator(coreConfig->get("passenger_root").asString());
701
-
702
698
  wo->randomGenerator = boost::make_shared<RandomGenerator>();
703
699
  // Check whether /dev/urandom is actually random.
704
700
  // https://code.google.com/p/phusion-passenger/issues/detail?id=516
@@ -710,7 +706,7 @@ initializeNonPrivilegedWorkingObjects() {
710
706
  UPDATE_TRACE_POINT();
711
707
  wo->spawningKitContext = boost::make_shared<SpawningKit::Context>(
712
708
  wo->spawningKitContextSchema);
713
- wo->spawningKitContext->resourceLocator = &wo->resourceLocator;
709
+ wo->spawningKitContext->resourceLocator = Agent::Fundamentals::context->resourceLocator;
714
710
  wo->spawningKitContext->wrapperRegistry = coreWrapperRegistry;
715
711
  wo->spawningKitContext->randomGenerator = wo->randomGenerator;
716
712
  wo->spawningKitContext->integrationMode = coreConfig->get("integration_mode").asString();
@@ -772,7 +768,7 @@ initializeNonPrivilegedWorkingObjects() {
772
768
  &coreSchema->controllerSingleAppMode.schema,
773
769
  &wo->singleAppModeConfig,
774
770
  coreSchema->controllerSingleAppMode.translator);
775
- two.controller->resourceLocator = &wo->resourceLocator;
771
+ two.controller->resourceLocator = Agent::Fundamentals::context->resourceLocator;
776
772
  two.controller->wrapperRegistry = coreWrapperRegistry;
777
773
  two.controller->appPool = wo->appPool;
778
774
  two.controller->shutdownFinishCallback = controllerShutdownFinished;
@@ -877,7 +873,7 @@ initializeSecurityUpdateChecker() {
877
873
  config,
878
874
  coreSchema->securityUpdateChecker.translator);
879
875
  workingObjects->securityUpdateChecker = checker;
880
- checker->resourceLocator = &workingObjects->resourceLocator;
876
+ checker->resourceLocator = Agent::Fundamentals::context->resourceLocator;
881
877
  checker->initialize();
882
878
  checker->start();
883
879
  }
@@ -927,7 +923,7 @@ initializeAdminPanelConnector() {
927
923
  AdminPanelConnector *connector = new Core::AdminPanelConnector(
928
924
  coreSchema->adminPanelConnector.schema, config,
929
925
  coreSchema->adminPanelConnector.translator);
930
- connector->resourceLocator = &wo.resourceLocator;
926
+ connector->resourceLocator = Agent::Fundamentals::context->resourceLocator;
931
927
  connector->appPool = wo.appPool;
932
928
  connector->configGetter = inspectConfig;
933
929
  for (unsigned int i = 0; i < wo.threadWorkingObjects.size(); i++) {
@@ -956,7 +952,7 @@ prestartWebApps() {
956
952
  }
957
953
 
958
954
  boost::function<void ()> func = boost::bind(prestartWebApps,
959
- wo->resourceLocator,
955
+ *Agent::Fundamentals::context->resourceLocator,
960
956
  coreConfig->get("default_ruby").asString(),
961
957
  prestartURLs
962
958
  );
@@ -983,7 +979,7 @@ warnIfPassengerRootVulnerable() {
983
979
  return; // Passenger is not root, so no escalation.
984
980
  }
985
981
 
986
- string root = workingObjects->resourceLocator.getInstallSpec();
982
+ string root = Agent::Fundamentals::context->resourceLocator->getInstallSpec();
987
983
  vector<string> errors, checkErrors;
988
984
  if (isPathProbablySecureForRootUse(root, errors, checkErrors)) {
989
985
  if (!checkErrors.empty()) {
@@ -1400,13 +1396,10 @@ parseOptions(int argc, const char *argv[], ConfigKit::Store &config) {
1400
1396
  }
1401
1397
  }
1402
1398
 
1403
- if (!updates.empty()) {
1404
- vector<ConfigKit::Error> errors;
1405
- if (!config.update(updates, errors)) {
1406
- P_BUG("Unable to set initial configuration: " <<
1407
- ConfigKit::toString(errors) << "\n"
1408
- "Raw initial configuration: " << updates.toStyledString());
1409
- }
1399
+ vector<ConfigKit::Error> errors;
1400
+ if (!config.update(updates, errors)) {
1401
+ P_ERROR("*** Error in options: " << ConfigKit::toString(errors));
1402
+ std::exit(1);
1410
1403
  }
1411
1404
  }
1412
1405
 
@@ -30,9 +30,7 @@
30
30
  #include <boost/thread.hpp>
31
31
  #include <boost/scoped_array.hpp>
32
32
  #include <string>
33
- #include <vector>
34
- #include <stdexcept>
35
- #include <algorithm>
33
+ #include <exception>
36
34
  #include <utility>
37
35
  #include <cerrno>
38
36
  #include <cstddef>
@@ -45,7 +43,6 @@
45
43
  #include <pwd.h>
46
44
  #include <grp.h>
47
45
  #include <unistd.h>
48
- #include <limits.h>
49
46
 
50
47
  #include <jsoncpp/json.h>
51
48
 
@@ -350,55 +347,6 @@ private:
350
347
  }
351
348
  }
352
349
 
353
- #if 0
354
- void inferApplicationInfo() const {
355
- TRACE_POINT();
356
- session.result.codeRevision = readFromRevisionFile();
357
- if (session.result.codeRevision.empty()) {
358
- session.result.codeRevision = inferCodeRevisionFromCapistranoSymlink();
359
- }
360
- }
361
-
362
- string readFromRevisionFile() const {
363
- TRACE_POINT();
364
- string filename = config->appRoot + "/REVISION";
365
- try {
366
- if (fileExists(filename)) {
367
- return strip(readAll(filename));
368
- }
369
- } catch (const SystemException &e) {
370
- P_WARN("Cannot access " << filename << ": " << e.what());
371
- }
372
- return string();
373
- }
374
-
375
- string inferCodeRevisionFromCapistranoSymlink() const {
376
- TRACE_POINT();
377
- if (extractBaseName(config->appRoot) == "current") {
378
- string appRoot = config->appRoot.toString(); // null terminate string
379
- char buf[PATH_MAX + 1];
380
- ssize_t ret;
381
-
382
- do {
383
- ret = readlink(appRoot.c_str(), buf, PATH_MAX);
384
- } while (ret == -1 && errno == EINTR);
385
- if (ret == -1) {
386
- if (errno == EINVAL) {
387
- return string();
388
- } else {
389
- int e = errno;
390
- P_WARN("Cannot read symlink " << appRoot << ": " << strerror(e));
391
- }
392
- }
393
-
394
- buf[ret] = '\0';
395
- return extractBaseName(buf);
396
- } else {
397
- return string();
398
- }
399
- }
400
- #endif
401
-
402
350
  void findFreePortOrSocketFile() {
403
351
  TRACE_POINT();
404
352
  session.expectedStartPort = findFreePort();
@@ -89,6 +89,9 @@ struct HandshakeSession {
89
89
  { }
90
90
 
91
91
  ~HandshakeSession() {
92
+ boost::this_thread::disable_interruption di;
93
+ boost::this_thread::disable_syscall_interruption dsi;
94
+
92
95
  if (workDirFd != -1) {
93
96
  safelyClose(workDirFd, true);
94
97
  }
@@ -31,11 +31,12 @@
31
31
  #include <cerrno>
32
32
 
33
33
  #include <sys/types.h>
34
- #include <limits.h>
34
+ #include <limits.h> // IWYU pragma: keep; for PATH_MAX
35
35
  #include <unistd.h>
36
36
 
37
37
  #include <Exceptions.h>
38
38
  #include <Utils.h>
39
+ #include <FileTools/FileManip.h>
39
40
  #include <StrIntTools/StrIntUtils.h>
40
41
 
41
42
  namespace Passenger {
@@ -78,6 +79,8 @@ public:
78
79
 
79
80
  ~HandshakeWorkDir() {
80
81
  if (!path.empty()) {
82
+ boost::this_thread::disable_interruption di;
83
+ boost::this_thread::disable_syscall_interruption dsi;
81
84
  removeDirTree(path);
82
85
  }
83
86
  }
@@ -108,7 +111,7 @@ public:
108
111
  // dropping root privileges).
109
112
  boost::this_thread::disable_interruption di;
110
113
  boost::this_thread::disable_syscall_interruption dsi;
111
- syscalls::chown(path.c_str(), uid, gid);
114
+ oxt::syscalls::chown(path.c_str(), uid, gid);
112
115
  }
113
116
  };
114
117
 
@@ -33,12 +33,12 @@
33
33
  #include <string>
34
34
  #include <vector>
35
35
  #include <map>
36
- #include <stdexcept>
36
+ #include <exception>
37
37
  #include <dirent.h>
38
38
  #include <sys/types.h>
39
39
  #include <sys/wait.h>
40
40
  #include <sys/stat.h>
41
- #include <signal.h>
41
+ #include <signal.h> // IWYU pragma: keep; for signal constants
42
42
  #include <unistd.h>
43
43
  #include <cstring>
44
44
  #include <cassert>
@@ -66,6 +66,10 @@
66
66
  #include <Core/SpawningKit/Handshake/Perform.h>
67
67
  #include <Core/SpawningKit/Handshake/BackgroundIOCapturer.h>
68
68
 
69
+ #ifdef INTELLISENSE
70
+ #include <Core/ApplicationPool/Options.h>
71
+ #endif
72
+
69
73
  namespace Passenger {
70
74
  namespace SpawningKit {
71
75
 
@@ -38,6 +38,10 @@
38
38
  #include <Core/SpawningKit/Result.h>
39
39
  #include <Core/SpawningKit/UserSwitchingRules.h>
40
40
 
41
+ #ifdef INTELLISENSE
42
+ #include <Core/ApplicationPool/Options.h>
43
+ #endif
44
+
41
45
  namespace Passenger {
42
46
  namespace SpawningKit {
43
47
 
@@ -29,13 +29,13 @@
29
29
  #include <boost/cstdint.hpp>
30
30
  #include <sys/types.h>
31
31
  #include <sys/stat.h>
32
+ #include <sys/wait.h>
32
33
  #include <sys/select.h>
33
34
  #include <cstdio>
34
35
  #include <cstdlib>
35
36
  #include <cstddef>
36
37
  #include <cstring>
37
38
  #include <cerrno>
38
- #include <cassert>
39
39
  #include <fcntl.h>
40
40
  #include <poll.h>
41
41
  #include <unistd.h>
@@ -121,8 +121,6 @@ typedef void (*Callback)(AbortHandlerWorkingState &state, void *userData);
121
121
 
122
122
 
123
123
  static AbortHandlerContext *ctx = NULL;
124
- static const char digits[] = "0123456789";
125
- static const char hex_chars[] = "0123456789abcdef";
126
124
 
127
125
 
128
126
  static void
@@ -269,6 +267,65 @@ appendSignalReason(char *buf, const char *end, siginfo_t *info) {
269
267
  return buf;
270
268
  }
271
269
 
270
+ static bool
271
+ resumeOriginalProcess(AbortHandlerWorkingState &state) {
272
+ const char *end = state.messageBuf + sizeof(state.messageBuf);
273
+ char *pos = state.messageBuf;
274
+ pos = ASSU::appendData(pos, end, state.messagePrefix);
275
+ pos = ASSU::appendData(pos, end, " ] Triggering original signal handler");
276
+ pos = ASSU::appendData(pos, end, "\n");
277
+ write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
278
+
279
+ int e = kill(state.pid, SIGCONT);
280
+ if (e == -1) {
281
+ int e = errno;
282
+ pos = state.messageBuf;
283
+ pos = ASSU::appendData(pos, end, state.messagePrefix);
284
+ pos = ASSU::appendData(pos, end, " ] Could not resume original process: kill() failed: ");
285
+ pos = ASSU::appendData(pos, end, ASSU::limitedStrerror(e));
286
+ pos = ASSU::appendData(pos, end, " (errno=");
287
+ pos = ASSU::appendInteger<int, 10>(pos, end, e);
288
+ pos = ASSU::appendData(pos, end, ")\n");
289
+ write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
290
+
291
+ return false;
292
+ } {
293
+ return true;
294
+ }
295
+ }
296
+
297
+ static void
298
+ forceTerminateOriginalProcess(AbortHandlerWorkingState &state) {
299
+ const char *end = state.messageBuf + sizeof(state.messageBuf);
300
+ char *pos = state.messageBuf;
301
+ pos = ASSU::appendData(pos, end, state.messagePrefix);
302
+ pos = ASSU::appendData(pos, end, " ] Force terminating original process");
303
+ pos = ASSU::appendData(pos, end, "\n");
304
+ write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
305
+
306
+ int ret = kill(state.pid, SIGKILL);
307
+ if (ret == -1) {
308
+ int e = errno;
309
+ pos = state.messageBuf;
310
+ pos = ASSU::appendData(pos, end, state.messagePrefix);
311
+ pos = ASSU::appendData(pos, end, " ] Could not force terminate original process: kill() failed: ");
312
+ pos = ASSU::appendData(pos, end, ASSU::limitedStrerror(e));
313
+ pos = ASSU::appendData(pos, end, " (errno=");
314
+ pos = ASSU::appendInteger<int, 10>(pos, end, e);
315
+ pos = ASSU::appendData(pos, end, ")\n");
316
+ write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
317
+ }
318
+ }
319
+
320
+ static void
321
+ resumeOrForceTerminateOriginalProcess(AbortHandlerWorkingState &state) {
322
+ if (ctx->config->forceTerminateProcess) {
323
+ forceTerminateOriginalProcess(state);
324
+ } else if (!resumeOriginalProcess(state)) {
325
+ forceTerminateOriginalProcess(state);
326
+ }
327
+ }
328
+
272
329
  static int
273
330
  runInSubprocessWithTimeLimit(AbortHandlerWorkingState &state, Callback callback, void *userData, int timeLimit) {
274
331
  char *pos;
@@ -633,11 +690,25 @@ dumpWithCrashWatch(AbortHandlerWorkingState &state) {
633
690
  close(p[0]);
634
691
  backtrace_symbols_fd(backtraceStore, frames, p[1]);
635
692
  close(p[1]);
636
- if (waitpid(pid, &status, 0) == -1 || status != 0) {
693
+
694
+ int ret = waitpid(pid, &status, 0);
695
+ if (ret == -1 || status != 0) {
696
+ int e = errno;
637
697
  pos = state.messageBuf;
638
698
  pos = ASSU::appendData(pos, end, "ERROR: cannot execute '");
639
699
  pos = ASSU::appendData(pos, end, ctx->backtraceSanitizerCommand);
640
- pos = ASSU::appendData(pos, end, "' for sanitizing the backtrace, writing to stderr directly...\n");
700
+ pos = ASSU::appendData(pos, end, "' for sanitizing the backtrace (");
701
+ if (ret == -1) {
702
+ pos = ASSU::appendData(pos, end, "waitpid() failed, errno=");
703
+ pos = ASSU::appendInteger<int, 10>(pos, end, e);
704
+ } else if (WIFSIGNALED(status)) {
705
+ pos = ASSU::appendData(pos, end, "exited with signal ");
706
+ pos = ASSU::appendInteger<int, 10>(pos, end, WTERMSIG(status));
707
+ } else {
708
+ pos = ASSU::appendData(pos, end, "exit status ");
709
+ pos = ASSU::appendInteger<int, 10>(pos, end, WEXITSTATUS(status));
710
+ }
711
+ pos = ASSU::appendData(pos, end, "), writing to stderr directly...\n");
641
712
  write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
642
713
  backtrace_symbols_fd(backtraceStore, frames, STDERR_FILENO);
643
714
  }
@@ -1083,19 +1154,19 @@ abortHandler(int signo, siginfo_t *info, void *_unused) {
1083
1154
  // with SIGPIPE as a result, so we ignore SIGPIPE again.
1084
1155
  ignoreSigpipe();
1085
1156
  dumpDiagnostics(state);
1086
- // The child process may or may or may not resume the original process.
1087
- // We do it ourselves just to be sure.
1088
- kill(state.pid, SIGCONT);
1157
+ resumeOrForceTerminateOriginalProcess(state);
1089
1158
  _exit(0);
1090
1159
 
1091
1160
  } else if (child == -1) {
1092
1161
  int e = errno;
1093
1162
  pos = state.messageBuf;
1094
1163
  pos = ASSU::appendData(pos, end, state.messagePrefix);
1095
- pos = ASSU::appendData(pos, end, "] Could not fork a child process for dumping diagnostics: fork() failed with errno=");
1164
+ pos = ASSU::appendData(pos, end, " ] Could not fork a child process for dumping diagnostics: fork() failed with errno=");
1096
1165
  pos = ASSU::appendInteger<int, 10>(pos, end, e);
1097
1166
  pos = ASSU::appendData(pos, end, "\n");
1098
1167
  write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
1168
+
1169
+ resumeOrForceTerminateOriginalProcess(state);
1099
1170
  _exit(1);
1100
1171
 
1101
1172
  } else {
@@ -1112,6 +1183,8 @@ abortHandler(int signo, siginfo_t *info, void *_unused) {
1112
1183
  pos = ASSU::appendData(pos, end, "\n");
1113
1184
  write_nowarn(STDERR_FILENO, state.messageBuf, pos - state.messageBuf);
1114
1185
 
1186
+ resumeOrForceTerminateOriginalProcess(state);
1187
+
1115
1188
  } else {
1116
1189
  raise(SIGSTOP);
1117
1190
  // Will continue after the child process has done its job.
@@ -1208,6 +1281,12 @@ abortHandlerConfigChanged() {
1208
1281
  char *oldCrashWatchCommand = ctx->crashWatchCommand;
1209
1282
  char *oldBacktraceSanitizerCommand = ctx->backtraceSanitizerCommand;
1210
1283
 
1284
+ if (config->origArgv == NULL) {
1285
+ fprintf(stderr, "AbortHandler requires config->origArgv!\n");
1286
+ fflush(stderr);
1287
+ abort();
1288
+ }
1289
+
1211
1290
  if (config->resourceLocator != NULL) {
1212
1291
  string path;
1213
1292
  const ResourceLocator *locator = config->resourceLocator;
@@ -62,6 +62,7 @@ struct AbortHandlerConfig {
62
62
  bool dumpWithCrashWatch;
63
63
  bool beep;
64
64
  bool stopProcess;
65
+ bool forceTerminateProcess;
65
66
  ResourceLocator *resourceLocator;
66
67
  DiagnosticsDumper diagnosticsDumpers[MAX_DIAGNOSTICS_DUMPERS];
67
68
 
@@ -72,6 +73,7 @@ struct AbortHandlerConfig {
72
73
  dumpWithCrashWatch(false),
73
74
  beep(false),
74
75
  stopProcess(false),
76
+ forceTerminateProcess(false),
75
77
  resourceLocator(NULL)
76
78
  { }
77
79
  };
@@ -38,9 +38,8 @@
38
38
  #include <vector>
39
39
 
40
40
  #include <sys/types.h>
41
- #include <stdlib.h> // for srandom()
41
+ #include <stdlib.h>
42
42
  #include <unistd.h>
43
- #include <signal.h>
44
43
  #include <cstdio>
45
44
  #include <cstdlib>
46
45
  #include <cstring>
@@ -468,6 +467,7 @@ maybeInitializeAbortHandler() {
468
467
  config->dumpWithCrashWatch = getEnvBool("PASSENGER_DUMP_WITH_CRASH_WATCH", true);
469
468
  config->beep = getEnvBool("PASSENGER_BEEP_ON_ABORT");
470
469
  config->stopProcess = getEnvBool("PASSENGER_STOP_ON_ABORT");
470
+ config->forceTerminateProcess = getEnvBool("PASSENGER_FORCE_TERMINATE_ON_ABORT");
471
471
 
472
472
  installAbortHandler(config);
473
473
  }
@@ -525,6 +525,12 @@ storeArgvCopy(int argc, char *argv[]) {
525
525
  for (int i = 0; i < argc; i++) {
526
526
  context->origArgv[i] = strdup(argv[i]);
527
527
  }
528
+
529
+ if (abortHandlerInstalled()) {
530
+ // Let AbortHandler use the copy.
531
+ context->abortHandlerConfig.origArgv = context->origArgv;
532
+ abortHandlerConfigChanged();
533
+ }
528
534
  }
529
535
 
530
536
  static void
@@ -558,7 +564,7 @@ initializeAgent(int argc, char **argv[], const char *processName,
558
564
  {
559
565
  const char *seedStr;
560
566
 
561
- context = new Context();
567
+ context = new Context(argc, *argv);
562
568
 
563
569
  seedStr = getEnvString("PASSENGER_RANDOM_SEED");
564
570
  if (seedStr == NULL) {
@@ -48,11 +48,11 @@ struct Context {
48
48
  bool feedbackFdAvailable;
49
49
  AbortHandlerConfig abortHandlerConfig;
50
50
 
51
- Context()
51
+ Context(int argc, char *argv[])
52
52
  : resourceLocator(NULL),
53
53
  randomSeed(0),
54
- origArgc(0),
55
- origArgv(NULL),
54
+ origArgc(argc),
55
+ origArgv(argv),
56
56
  feedbackFdAvailable(false)
57
57
  { }
58
58
  };
@@ -36,8 +36,7 @@
36
36
  #include <cstdlib>
37
37
  #include <cstring>
38
38
  #include <cerrno>
39
- #include <cassert>
40
- #include <stdexcept>
39
+ #include <exception>
41
40
  #include <string>
42
41
  #include <vector>
43
42
 
@@ -47,7 +46,7 @@
47
46
  #include <sys/time.h>
48
47
  #include <sys/resource.h>
49
48
  #include <sys/stat.h>
50
- #include <limits.h>
49
+ #include <limits.h> // IWYU pragma: keep (for PATH_MAX)
51
50
  #include <unistd.h>
52
51
  #include <pwd.h>
53
52
  #include <grp.h>
@@ -218,8 +217,8 @@ dumpEnvvars(const string &workDir) {
218
217
  NULL
219
218
  };
220
219
  SubprocessInfo info;
221
- runCommand(command, info, true, true,
222
- boost::bind(reopenStdout, fileno(f)));
220
+ int fd = fileno(f);
221
+ runCommand(command, info, true, true, [=]() { reopenStdout(fd); });
223
222
  fclose(f);
224
223
  }
225
224
 
@@ -237,8 +236,8 @@ dumpUserInfo(const string &workDir) {
237
236
  NULL
238
237
  };
239
238
  SubprocessInfo info;
240
- runCommand(command, info, true, true,
241
- boost::bind(reopenStdout, fileno(f)));
239
+ int fd = fileno(f);
240
+ runCommand(command, info, true, true, [=]() { reopenStdout(fd); });
242
241
  fclose(f);
243
242
  }
244
243
 
@@ -155,7 +155,7 @@ using namespace std;
155
155
  * security_update_checker_interval unsigned integer - default(86400)
156
156
  * security_update_checker_proxy_url string - -
157
157
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
158
- * server_software string - default("Phusion_Passenger/6.0.23")
158
+ * server_software string - default("Phusion_Passenger/6.0.24")
159
159
  * setsid boolean - default(false)
160
160
  * show_version_in_header boolean - default(true)
161
161
  * single_app_mode_app_root string - default,read_only
@@ -836,13 +836,10 @@ parseOptions(int argc, const char *argv[], ConfigKit::Store &config) {
836
836
  }
837
837
  }
838
838
 
839
- if (!updates.empty()) {
840
- vector<ConfigKit::Error> errors;
841
- if (!config.update(updates, errors)) {
842
- P_BUG("Unable to set initial configuration: " <<
843
- ConfigKit::toString(errors) << "\n"
844
- "Raw initial configuration: " << updates.toStyledString());
845
- }
839
+ vector<ConfigKit::Error> errors;
840
+ if (!config.update(updates, errors)) {
841
+ P_ERROR("*** Error in options: " << ConfigKit::toString(errors));
842
+ std::exit(1);
846
843
  }
847
844
  }
848
845
 
@@ -632,8 +632,10 @@ public:
632
632
  } // namespace Apache2Module
633
633
  } // namespace Passenger
634
634
 
635
- #include "../ServerConfig/AutoGeneratedManifestGeneration.cpp"
636
- #include "../DirConfig/AutoGeneratedManifestGeneration.cpp"
637
- #include "AutoGeneratedManifestDefaultsInitialization.cpp"
635
+ #if !defined(INTELLISENSE)
636
+ #include "../ServerConfig/AutoGeneratedManifestGeneration.cpp"
637
+ #include "../DirConfig/AutoGeneratedManifestGeneration.cpp"
638
+ #include "AutoGeneratedManifestDefaultsInitialization.cpp"
639
+ #endif
638
640
 
639
641
  #endif /* _PASSENGER_APACHE2_MODULE_CONFIG_GENERAL_MANIFEST_GENERATION_H_ */
@@ -29,6 +29,9 @@
29
29
  #ifdef INTELLISENSE
30
30
  // These includes do nothing, but keep IntelliSense happy.
31
31
  #include <ap_config.h>
32
+ #include <set>
33
+ #include <Constants.h>
34
+ #include <StaticString.h>
32
35
  #include "../ConfigGeneral/Common.h"
33
36
  #endif
34
37
 
@@ -37,6 +37,9 @@ def main
37
37
  #ifdef INTELLISENSE
38
38
  // These includes do nothing, but keep IntelliSense happy.
39
39
  #include <ap_config.h>
40
+ #include <set>
41
+ #include <Constants.h>
42
+ #include <StaticString.h>
40
43
  #include "../ConfigGeneral/Common.h"
41
44
  #endif
42
45
  }
@@ -28,9 +28,10 @@
28
28
 
29
29
  #ifdef INTELLISENSE
30
30
  // These includes do nothing, but keep IntelliSense happy.
31
+ #include <set>
31
32
  #include <StaticString.h>
33
+ #include <Constants.h>
32
34
  #include <ap_config.h>
33
- #include "../ConfigGeneral/Common.h"
34
35
  #endif
35
36
 
36
37
  /*
@@ -36,9 +36,10 @@ def main
36
36
 
37
37
  #ifdef INTELLISENSE
38
38
  // These includes do nothing, but keep IntelliSense happy.
39
+ #include <set>
39
40
  #include <StaticString.h>
41
+ #include <Constants.h>
40
42
  #include <ap_config.h>
41
- #include "../ConfigGeneral/Common.h"
42
43
  #endif
43
44
  }
44
45