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
@@ -70,25 +70,24 @@ int close(int d, state_type& state, boost::system::error_code& ec)
70
70
  ::fcntl(d, F_SETFL, flags & ~O_NONBLOCK);
71
71
  #else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
72
72
  ioctl_arg_type arg = 0;
73
- # if defined(ENOTTY) || defined(ENOTCAPABLE)
74
- result = ::ioctl(d, FIONBIO, &arg);
75
- get_last_error(ec, result < 0);
76
- if (false
77
- # if defined(ENOTTY)
73
+ if ((state & possible_dup) == 0)
74
+ {
75
+ result = ::ioctl(d, FIONBIO, &arg);
76
+ get_last_error(ec, result < 0);
77
+ }
78
+ if ((state & possible_dup) != 0
79
+ # if defined(ENOTTY)
78
80
  || ec.value() == ENOTTY
79
- # endif // defined(ENOTTY)
80
- # if defined(ENOTCAPABLE)
81
+ # endif // defined(ENOTTY)
82
+ # if defined(ENOTCAPABLE)
81
83
  || ec.value() == ENOTCAPABLE
82
- # endif // defined(ENOTCAPABLE)
84
+ # endif // defined(ENOTCAPABLE)
83
85
  )
84
86
  {
85
87
  int flags = ::fcntl(d, F_GETFL, 0);
86
88
  if (flags >= 0)
87
89
  ::fcntl(d, F_SETFL, flags & ~O_NONBLOCK);
88
90
  }
89
- # else // defined(ENOTTY) || defined(ENOTCAPABLE)
90
- ::ioctl(d, FIONBIO, &arg);
91
- # endif // defined(ENOTTY) || defined(ENOTCAPABLE)
92
91
  #endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
93
92
  state &= ~non_blocking;
94
93
 
@@ -115,21 +114,24 @@ bool set_user_non_blocking(int d, state_type& state,
115
114
  if (result >= 0)
116
115
  {
117
116
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
118
- result = ::fcntl(d, F_SETFL, flag);
117
+ result = (flag != result) ? ::fcntl(d, F_SETFL, flag) : 0;
119
118
  get_last_error(ec, result < 0);
120
119
  }
121
120
  #else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
122
121
  ioctl_arg_type arg = (value ? 1 : 0);
123
- int result = ::ioctl(d, FIONBIO, &arg);
124
- get_last_error(ec, result < 0);
125
- # if defined(ENOTTY) || defined(ENOTCAPABLE)
126
- if (false
127
- # if defined(ENOTTY)
122
+ int result = 0;
123
+ if ((state & possible_dup) == 0)
124
+ {
125
+ result = ::ioctl(d, FIONBIO, &arg);
126
+ get_last_error(ec, result < 0);
127
+ }
128
+ if ((state & possible_dup) != 0
129
+ # if defined(ENOTTY)
128
130
  || ec.value() == ENOTTY
129
- # endif // defined(ENOTTY)
130
- # if defined(ENOTCAPABLE)
131
+ # endif // defined(ENOTTY)
132
+ # if defined(ENOTCAPABLE)
131
133
  || ec.value() == ENOTCAPABLE
132
- # endif // defined(ENOTCAPABLE)
134
+ # endif // defined(ENOTCAPABLE)
133
135
  )
134
136
  {
135
137
  result = ::fcntl(d, F_GETFL, 0);
@@ -137,11 +139,10 @@ bool set_user_non_blocking(int d, state_type& state,
137
139
  if (result >= 0)
138
140
  {
139
141
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
140
- result = ::fcntl(d, F_SETFL, flag);
142
+ result = (flag != result) ? ::fcntl(d, F_SETFL, flag) : 0;
141
143
  get_last_error(ec, result < 0);
142
144
  }
143
145
  }
144
- # endif // defined(ENOTTY) || defined(ENOTCAPABLE)
145
146
  #endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
146
147
 
147
148
  if (result >= 0)
@@ -185,21 +186,24 @@ bool set_internal_non_blocking(int d, state_type& state,
185
186
  if (result >= 0)
186
187
  {
187
188
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
188
- result = ::fcntl(d, F_SETFL, flag);
189
+ result = (flag != result) ? ::fcntl(d, F_SETFL, flag) : 0;
189
190
  get_last_error(ec, result < 0);
190
191
  }
191
192
  #else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
192
193
  ioctl_arg_type arg = (value ? 1 : 0);
193
- int result = ::ioctl(d, FIONBIO, &arg);
194
- get_last_error(ec, result < 0);
195
- # if defined(ENOTTY) || defined(ENOTCAPABLE)
196
- if (false
197
- # if defined(ENOTTY)
194
+ int result = 0;
195
+ if ((state & possible_dup) == 0)
196
+ {
197
+ result = ::ioctl(d, FIONBIO, &arg);
198
+ get_last_error(ec, result < 0);
199
+ }
200
+ if ((state & possible_dup) != 0
201
+ # if defined(ENOTTY)
198
202
  || ec.value() == ENOTTY
199
- # endif // defined(ENOTTY)
200
- # if defined(ENOTCAPABLE)
203
+ # endif // defined(ENOTTY)
204
+ # if defined(ENOTCAPABLE)
201
205
  || ec.value() == ENOTCAPABLE
202
- # endif // defined(ENOTCAPABLE)
206
+ # endif // defined(ENOTCAPABLE)
203
207
  )
204
208
  {
205
209
  result = ::fcntl(d, F_GETFL, 0);
@@ -207,11 +211,10 @@ bool set_internal_non_blocking(int d, state_type& state,
207
211
  if (result >= 0)
208
212
  {
209
213
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
210
- result = ::fcntl(d, F_SETFL, flag);
214
+ result = (flag != result) ? ::fcntl(d, F_SETFL, flag) : 0;
211
215
  get_last_error(ec, result < 0);
212
216
  }
213
217
  }
214
- # endif // defined(ENOTTY) || defined(ENOTCAPABLE)
215
218
  #endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
216
219
 
217
220
  if (result >= 0)
@@ -67,7 +67,7 @@ void dev_poll_reactor::shutdown()
67
67
  timer_queues_.get_all_timers(ops);
68
68
 
69
69
  scheduler_.abandon_operations(ops);
70
- }
70
+ }
71
71
 
72
72
  void dev_poll_reactor::notify_fork(
73
73
  boost::asio::execution_context::fork_event fork_ev)
@@ -199,18 +199,20 @@ boost::system::error_code reactive_descriptor_service::cancel(
199
199
  }
200
200
 
201
201
  void reactive_descriptor_service::do_start_op(implementation_type& impl,
202
- int op_type, reactor_op* op, bool is_continuation, bool is_non_blocking,
203
- bool noop, void (*on_immediate)(operation* op, bool, const void*),
202
+ int op_type, reactor_op* op, bool is_continuation,
203
+ bool allow_speculative, bool noop, bool needs_non_blocking,
204
+ void (*on_immediate)(operation* op, bool, const void*),
204
205
  const void* immediate_arg)
205
206
  {
206
207
  if (!noop)
207
208
  {
208
- if ((impl.state_ & descriptor_ops::non_blocking) ||
209
- descriptor_ops::set_internal_non_blocking(
209
+ if ((impl.state_ & descriptor_ops::non_blocking)
210
+ || !needs_non_blocking
211
+ || descriptor_ops::set_internal_non_blocking(
210
212
  impl.descriptor_, impl.state_, true, op->ec_))
211
213
  {
212
214
  reactor_.start_op(op_type, impl.descriptor_, impl.reactor_data_, op,
213
- is_continuation, is_non_blocking, on_immediate, immediate_arg);
215
+ is_continuation, allow_speculative, on_immediate, immediate_arg);
214
216
  return;
215
217
  }
216
218
  }
@@ -235,19 +235,21 @@ boost::system::error_code reactive_socket_service_base::do_assign(
235
235
  }
236
236
 
237
237
  void reactive_socket_service_base::do_start_op(
238
- reactive_socket_service_base::base_implementation_type& impl, int op_type,
239
- reactor_op* op, bool is_continuation, bool is_non_blocking, bool noop,
238
+ reactive_socket_service_base::base_implementation_type& impl,
239
+ int op_type, reactor_op* op, bool is_continuation,
240
+ bool allow_speculative, bool noop, bool needs_non_blocking,
240
241
  void (*on_immediate)(operation* op, bool, const void*),
241
242
  const void* immediate_arg)
242
243
  {
243
244
  if (!noop)
244
245
  {
245
246
  if ((impl.state_ & socket_ops::non_blocking)
247
+ || !needs_non_blocking
246
248
  || socket_ops::set_internal_non_blocking(
247
249
  impl.socket_, impl.state_, true, op->ec_))
248
250
  {
249
251
  reactor_.start_op(op_type, impl.socket_, impl.reactor_data_, op,
250
- is_continuation, is_non_blocking, on_immediate, immediate_arg);
252
+ is_continuation, allow_speculative, on_immediate, immediate_arg);
251
253
  return;
252
254
  }
253
255
  }
@@ -264,7 +266,7 @@ void reactive_socket_service_base::do_start_accept_op(
264
266
  if (!peer_is_open)
265
267
  {
266
268
  do_start_op(impl, reactor::read_op, op, is_continuation,
267
- true, false, on_immediate, immediate_arg);
269
+ true, false, true, on_immediate, immediate_arg);
268
270
  }
269
271
  else
270
272
  {
@@ -41,6 +41,10 @@
41
41
  #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
42
42
  // || defined(__MACH__) && defined(__APPLE__)
43
43
 
44
+ #if defined(_MSC_VER) && (_MSC_VER >= 1800)
45
+ # include <malloc.h>
46
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1800)
47
+
44
48
  #include <boost/asio/detail/push_options.hpp>
45
49
 
46
50
  namespace boost {
@@ -340,25 +344,24 @@ int close(socket_type s, state_type& state,
340
344
  ::fcntl(s, F_SETFL, flags & ~O_NONBLOCK);
341
345
  # else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
342
346
  ioctl_arg_type arg = 0;
343
- # if defined(ENOTTY) || defined(ENOTCAPABLE)
344
- result = ::ioctl(s, FIONBIO, &arg);
345
- get_last_error(ec, result < 0);
346
- if (false
347
- # if defined(ENOTTY)
347
+ if ((state & possible_dup) == 0)
348
+ {
349
+ result = ::ioctl(s, FIONBIO, &arg);
350
+ get_last_error(ec, result < 0);
351
+ }
352
+ if ((state & possible_dup) != 0
353
+ # if defined(ENOTTY)
348
354
  || ec.value() == ENOTTY
349
- # endif // defined(ENOTTY)
350
- # if defined(ENOTCAPABLE)
355
+ # endif // defined(ENOTTY)
356
+ # if defined(ENOTCAPABLE)
351
357
  || ec.value() == ENOTCAPABLE
352
- # endif // defined(ENOTCAPABLE)
358
+ # endif // defined(ENOTCAPABLE)
353
359
  )
354
360
  {
355
361
  int flags = ::fcntl(s, F_GETFL, 0);
356
362
  if (flags >= 0)
357
363
  ::fcntl(s, F_SETFL, flags & ~O_NONBLOCK);
358
364
  }
359
- # else // defined(ENOTTY) || defined(ENOTCAPABLE)
360
- ::ioctl(s, FIONBIO, &arg);
361
- # endif // defined(ENOTTY) || defined(ENOTCAPABLE)
362
365
  # endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
363
366
  #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
364
367
  state &= ~non_blocking;
@@ -394,21 +397,24 @@ bool set_user_non_blocking(socket_type s,
394
397
  if (result >= 0)
395
398
  {
396
399
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
397
- result = ::fcntl(s, F_SETFL, flag);
400
+ result = (flag != result) ? ::fcntl(s, F_SETFL, flag) : 0;
398
401
  get_last_error(ec, result < 0);
399
402
  }
400
403
  #else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
401
404
  ioctl_arg_type arg = (value ? 1 : 0);
402
- int result = ::ioctl(s, FIONBIO, &arg);
403
- get_last_error(ec, result < 0);
404
- # if defined(ENOTTY) || defined(ENOTCAPABLE)
405
- if (false
406
- # if defined(ENOTTY)
405
+ int result = 0;
406
+ if ((state & possible_dup) == 0)
407
+ {
408
+ result = ::ioctl(s, FIONBIO, &arg);
409
+ get_last_error(ec, result < 0);
410
+ }
411
+ if ((state & possible_dup) != 0
412
+ # if defined(ENOTTY)
407
413
  || ec.value() == ENOTTY
408
- # endif // defined(ENOTTY)
409
- # if defined(ENOTCAPABLE)
414
+ # endif // defined(ENOTTY)
415
+ # if defined(ENOTCAPABLE)
410
416
  || ec.value() == ENOTCAPABLE
411
- # endif // defined(ENOTCAPABLE)
417
+ # endif // defined(ENOTCAPABLE)
412
418
  )
413
419
  {
414
420
  result = ::fcntl(s, F_GETFL, 0);
@@ -416,11 +422,10 @@ bool set_user_non_blocking(socket_type s,
416
422
  if (result >= 0)
417
423
  {
418
424
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
419
- result = ::fcntl(s, F_SETFL, flag);
425
+ result = (flag != result) ? ::fcntl(s, F_SETFL, flag) : 0;
420
426
  get_last_error(ec, result < 0);
421
427
  }
422
428
  }
423
- # endif // defined(ENOTTY) || defined(ENOTCAPABLE)
424
429
  #endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
425
430
 
426
431
  if (result >= 0)
@@ -468,21 +473,24 @@ bool set_internal_non_blocking(socket_type s,
468
473
  if (result >= 0)
469
474
  {
470
475
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
471
- result = ::fcntl(s, F_SETFL, flag);
476
+ result = (flag != result) ? ::fcntl(s, F_SETFL, flag) : 0;
472
477
  get_last_error(ec, result < 0);
473
478
  }
474
479
  #else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
475
480
  ioctl_arg_type arg = (value ? 1 : 0);
476
- int result = ::ioctl(s, FIONBIO, &arg);
477
- get_last_error(ec, result < 0);
478
- # if defined(ENOTTY) || defined(ENOTCAPABLE)
479
- if (false
480
- # if defined(ENOTTY)
481
+ int result = 0;
482
+ if ((state & possible_dup) == 0)
483
+ {
484
+ result = ::ioctl(s, FIONBIO, &arg);
485
+ get_last_error(ec, result < 0);
486
+ }
487
+ if ((state & possible_dup) != 0
488
+ # if defined(ENOTTY)
481
489
  || ec.value() == ENOTTY
482
- # endif // defined(ENOTTY)
483
- # if defined(ENOTCAPABLE)
490
+ # endif // defined(ENOTTY)
491
+ # if defined(ENOTCAPABLE)
484
492
  || ec.value() == ENOTCAPABLE
485
- # endif // defined(ENOTCAPABLE)
493
+ # endif // defined(ENOTCAPABLE)
486
494
  )
487
495
  {
488
496
  result = ::fcntl(s, F_GETFL, 0);
@@ -490,11 +498,10 @@ bool set_internal_non_blocking(socket_type s,
490
498
  if (result >= 0)
491
499
  {
492
500
  int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
493
- result = ::fcntl(s, F_SETFL, flag);
501
+ result = (flag != result) ? ::fcntl(s, F_SETFL, flag) : 0;
494
502
  get_last_error(ec, result < 0);
495
503
  }
496
504
  }
497
- # endif // defined(ENOTTY) || defined(ENOTCAPABLE)
498
505
  #endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
499
506
 
500
507
  if (result >= 0)
@@ -2580,9 +2587,11 @@ const char* inet_ntop(int af, const void* src, char* dest, size_t length,
2580
2587
  || if_indextoname(static_cast<unsigned>(scope_id), if_name + 1) == 0)
2581
2588
  #if defined(BOOST_ASIO_HAS_SNPRINTF)
2582
2589
  snprintf(if_name + 1, sizeof(if_name) - 1, "%lu", scope_id);
2583
- #else // defined(BOOST_ASIO_HAS_SNPRINTF)
2590
+ #elif defined(BOOST_ASIO_HAS_SECURE_RTL)
2591
+ sprintf_s(if_name + 1, sizeof(if_name) -1, "%lu", scope_id);
2592
+ #else // defined(BOOST_ASIO_HAS_SECURE_RTL)
2584
2593
  sprintf(if_name + 1, "%lu", scope_id);
2585
- #endif // defined(BOOST_ASIO_HAS_SNPRINTF)
2594
+ #endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
2586
2595
  strcat(dest, if_name);
2587
2596
  }
2588
2597
  return result;
@@ -91,7 +91,7 @@ void socket_select_interrupter::open_descriptors()
91
91
  socket_holder server(socket_ops::accept(acceptor.get(), 0, 0, ec));
92
92
  if (server.get() == invalid_socket)
93
93
  boost::asio::detail::throw_error(ec, "socket_select_interrupter");
94
-
94
+
95
95
  ioctl_arg_type non_blocking = 1;
96
96
  socket_ops::state_type client_state = 0;
97
97
  if (socket_ops::ioctl(client.get(), client_state,
@@ -0,0 +1,64 @@
1
+ //
2
+ // detail/initiation_base.hpp
3
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+
11
+ #ifndef BOOST_ASIO_DETAIL_INITIATION_BASE_HPP
12
+ #define BOOST_ASIO_DETAIL_INITIATION_BASE_HPP
13
+
14
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
+
18
+ #include <boost/asio/detail/config.hpp>
19
+ #include <boost/asio/detail/type_traits.hpp>
20
+
21
+ #include <boost/asio/detail/push_options.hpp>
22
+
23
+ namespace boost {
24
+ namespace asio {
25
+ namespace detail {
26
+
27
+ template <typename Initiation, typename = void>
28
+ class initiation_base : public Initiation
29
+ {
30
+ public:
31
+ template <typename I>
32
+ explicit initiation_base(I&& initiation)
33
+ : Initiation(static_cast<I&&>(initiation))
34
+ {
35
+ }
36
+ };
37
+
38
+ template <typename Initiation>
39
+ class initiation_base<Initiation, enable_if_t<!is_class<Initiation>::value>>
40
+ {
41
+ public:
42
+ template <typename I>
43
+ explicit initiation_base(I&& initiation)
44
+ : initiation_(static_cast<I&&>(initiation))
45
+ {
46
+ }
47
+
48
+ template <typename... Args>
49
+ void operator()(Args&&... args) const
50
+ {
51
+ initiation_(static_cast<Args&&>(args)...);
52
+ }
53
+
54
+ private:
55
+ Initiation initiation_;
56
+ };
57
+
58
+ } // namespace detail
59
+ } // namespace asio
60
+ } // namespace boost
61
+
62
+ #include <boost/asio/detail/pop_options.hpp>
63
+
64
+ #endif // BOOST_ASIO_DETAIL_INITIATION_BASE_HPP
@@ -55,18 +55,7 @@ inline const volatile T* to_address(const volatile T* p) { return p; }
55
55
  inline void* align(std::size_t alignment,
56
56
  std::size_t size, void*& ptr, std::size_t& space)
57
57
  {
58
- #if defined(BOOST_ASIO_HAS_STD_ALIGN)
59
58
  return std::align(alignment, size, ptr, space);
60
- #else // defined(BOOST_ASIO_HAS_STD_ALIGN)
61
- const uintptr_t intptr = reinterpret_cast<uintptr_t>(ptr);
62
- const uintptr_t aligned = (intptr - 1u + alignment) & -alignment;
63
- const std::size_t padding = aligned - intptr;
64
- if (size + padding > space)
65
- return 0;
66
- space -= padding;
67
- ptr = reinterpret_cast<void*>(aligned);
68
- return ptr;
69
- #endif // defined(BOOST_ASIO_HAS_STD_ALIGN)
70
59
  }
71
60
 
72
61
  } // namespace detail
@@ -240,7 +240,7 @@ public:
240
240
  default:
241
241
  p.p->ec_ = boost::asio::error::invalid_argument;
242
242
  start_op(impl, reactor::read_op, p.p,
243
- is_continuation, false, true, &io_ex, 0);
243
+ is_continuation, false, true, false, &io_ex, 0);
244
244
  p.v = p.p = 0;
245
245
  return;
246
246
  }
@@ -253,7 +253,8 @@ public:
253
253
  &reactor_, &impl.reactor_data_, impl.descriptor_, op_type);
254
254
  }
255
255
 
256
- start_op(impl, op_type, p.p, is_continuation, false, false, &io_ex, 0);
256
+ start_op(impl, op_type, p.p, is_continuation,
257
+ false, false, false, &io_ex, 0);
257
258
  p.v = p.p = 0;
258
259
  }
259
260
 
@@ -327,7 +328,7 @@ public:
327
328
 
328
329
  start_op(impl, reactor::write_op, p.p, is_continuation, true,
329
330
  buffer_sequence_adapter<boost::asio::const_buffer,
330
- ConstBufferSequence>::all_empty(buffers), &io_ex, 0);
331
+ ConstBufferSequence>::all_empty(buffers), true, &io_ex, 0);
331
332
  p.v = p.p = 0;
332
333
  }
333
334
 
@@ -361,7 +362,7 @@ public:
361
362
  &impl, impl.descriptor_, "async_write_some(null_buffers)"));
362
363
 
363
364
  start_op(impl, reactor::write_op, p.p,
364
- is_continuation, false, false, &io_ex, 0);
365
+ is_continuation, false, false, false, &io_ex, 0);
365
366
  p.v = p.p = 0;
366
367
  }
367
368
 
@@ -436,7 +437,7 @@ public:
436
437
 
437
438
  start_op(impl, reactor::read_op, p.p, is_continuation, true,
438
439
  buffer_sequence_adapter<boost::asio::mutable_buffer,
439
- MutableBufferSequence>::all_empty(buffers), &io_ex, 0);
440
+ MutableBufferSequence>::all_empty(buffers), true, &io_ex, 0);
440
441
  p.v = p.p = 0;
441
442
  }
442
443
 
@@ -470,14 +471,15 @@ public:
470
471
  &impl, impl.descriptor_, "async_read_some(null_buffers)"));
471
472
 
472
473
  start_op(impl, reactor::read_op, p.p,
473
- is_continuation, false, false, &io_ex, 0);
474
+ is_continuation, false, false, false, &io_ex, 0);
474
475
  p.v = p.p = 0;
475
476
  }
476
477
 
477
478
  private:
478
479
  // Start the asynchronous operation.
479
- BOOST_ASIO_DECL void do_start_op(implementation_type& impl, int op_type,
480
- reactor_op* op, bool is_continuation, bool is_non_blocking, bool noop,
480
+ BOOST_ASIO_DECL void do_start_op(implementation_type& impl,
481
+ int op_type, reactor_op* op, bool is_continuation,
482
+ bool allow_speculative, bool noop, bool needs_non_blocking,
481
483
  void (*on_immediate)(operation* op, bool, const void*),
482
484
  const void* immediate_arg);
483
485
 
@@ -485,18 +487,19 @@ private:
485
487
  // immediate completion.
486
488
  template <typename Op>
487
489
  void start_op(implementation_type& impl, int op_type, Op* op,
488
- bool is_continuation, bool is_non_blocking, bool noop,
489
- const void* io_ex, ...)
490
+ bool is_continuation, bool allow_speculative, bool noop,
491
+ bool needs_non_blocking, const void* io_ex, ...)
490
492
  {
491
- return do_start_op(impl, op_type, op, is_continuation,
492
- is_non_blocking, noop, &Op::do_immediate, io_ex);
493
+ return do_start_op(impl, op_type, op, is_continuation, allow_speculative,
494
+ noop, needs_non_blocking, &Op::do_immediate, io_ex);
493
495
  }
494
496
 
495
497
  // Start the asynchronous operation for handlers that are not specialised for
496
498
  // immediate completion.
497
499
  template <typename Op>
498
- void start_op(implementation_type& impl, int op_type, Op* op,
499
- bool is_continuation, bool is_non_blocking, bool noop, const void*,
500
+ void start_op(implementation_type& impl, int op_type,
501
+ Op* op, bool is_continuation, bool allow_speculative,
502
+ bool noop, bool needs_non_blocking, const void*,
500
503
  enable_if_t<
501
504
  is_same<
502
505
  typename associated_immediate_executor<
@@ -507,8 +510,9 @@ private:
507
510
  >::value
508
511
  >*)
509
512
  {
510
- return do_start_op(impl, op_type, op, is_continuation, is_non_blocking,
511
- noop, &reactor::call_post_immediate_completion, &reactor_);
513
+ return do_start_op(impl, op_type, op, is_continuation,
514
+ allow_speculative, noop, needs_non_blocking,
515
+ &reactor::call_post_immediate_completion, &reactor_);
512
516
  }
513
517
 
514
518
  // Helper class used to implement per-operation cancellation
@@ -188,7 +188,6 @@ public:
188
188
  BOOST_ASIO_HANDLER_INVOCATION_END;
189
189
  }
190
190
 
191
-
192
191
  private:
193
192
  Handler handler_;
194
193
  handler_work<Handler, IoExecutor> work_;
@@ -308,7 +308,7 @@ public:
308
308
  &impl, impl.socket_, "async_send_to"));
309
309
 
310
310
  start_op(impl, reactor::write_op, p.p,
311
- is_continuation, true, false, &io_ex, 0);
311
+ is_continuation, true, false, true, &io_ex, 0);
312
312
  p.v = p.p = 0;
313
313
  }
314
314
 
@@ -342,7 +342,7 @@ public:
342
342
  &impl, impl.socket_, "async_send_to(null_buffers)"));
343
343
 
344
344
  start_op(impl, reactor::write_op, p.p,
345
- is_continuation, false, false, &io_ex, 0);
345
+ is_continuation, false, false, false, &io_ex, 0);
346
346
  p.v = p.p = 0;
347
347
  }
348
348
 
@@ -433,7 +433,7 @@ public:
433
433
  start_op(impl,
434
434
  (flags & socket_base::message_out_of_band)
435
435
  ? reactor::except_op : reactor::read_op,
436
- p.p, is_continuation, true, false, &io_ex, 0);
436
+ p.p, is_continuation, true, false, true, &io_ex, 0);
437
437
  p.v = p.p = 0;
438
438
  }
439
439
 
@@ -472,7 +472,7 @@ public:
472
472
  start_op(impl,
473
473
  (flags & socket_base::message_out_of_band)
474
474
  ? reactor::except_op : reactor::read_op,
475
- p.p, is_continuation, false, false, &io_ex, 0);
475
+ p.p, is_continuation, false, false, false, &io_ex, 0);
476
476
  p.v = p.p = 0;
477
477
  }
478
478