passenger 6.2.0 → 6.2.2

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.
Files changed (898) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +69 -15
  3. data/CONTRIBUTING.md +7 -311
  4. data/CONTRIBUTORS +1 -0
  5. data/LICENSE +1 -1
  6. data/README.md +1 -1
  7. data/Rakefile +1 -1
  8. data/bin/passenger +1 -1
  9. data/bin/passenger-config +1 -1
  10. data/bin/passenger-install-apache2-module +1 -1
  11. data/bin/passenger-install-nginx-module +4 -9
  12. data/bin/passenger-memory-stats +1 -1
  13. data/bin/passenger-status +1 -1
  14. data/build/agent.rb +13 -15
  15. data/build/apache2.rb +13 -16
  16. data/build/basics.rb +10 -13
  17. data/build/common_library.rb +5 -9
  18. data/build/cxx_tests.rb +39 -12
  19. data/build/integration_tests.rb +5 -2
  20. data/build/misc.rb +1 -1
  21. data/build/nginx.rb +1 -1
  22. data/build/node_tests.rb +1 -1
  23. data/build/oxt_tests.rb +6 -8
  24. data/build/packaging.rb +1 -1
  25. data/build/ruby_extension.rb +1 -1
  26. data/build/ruby_tests.rb +1 -1
  27. data/build/schema_printer.rb +13 -15
  28. data/build/support/cplusplus.rb +61 -69
  29. data/build/support/cxx_dependency_map.rb +5 -64
  30. data/build/support/general.rb +1 -1
  31. data/build/support/vendor/cxx_hinted_parser/LICENSE.md +1 -1
  32. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser/parser.rb +1 -1
  33. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser.rb +1 -1
  34. data/build/support/vendor/cxxcodebuilder/LICENSE.md +1 -1
  35. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
  36. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/initializer_builder.rb +1 -1
  37. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder.rb +1 -1
  38. data/build/test_basics.rb +1 -1
  39. data/dev/copy_boost_headers +1 -1
  40. data/dev/index_cxx_dependencies.rb +5 -1
  41. data/dev/libev-changes.patch +108 -0
  42. data/dev/nginx_version_sha256 +1 -1
  43. data/dev/ruby_server.rb +1 -6
  44. data/dev/upgrading_libuv.sh +16 -0
  45. data/doc/BasicArchitectureOverview.md +55 -0
  46. data/doc/BuildCaching.md +23 -0
  47. data/doc/BuildSystem.md +49 -0
  48. data/doc/DebuggingAndStressTesting.md +2 -0
  49. data/doc/DesignAspects/LimitedGemDependencies.md +1 -0
  50. data/doc/DevEnvironmentSetup.md +46 -0
  51. data/doc/DevHandbook.md +28 -0
  52. data/doc/Packaging.md +1 -1
  53. data/doc/RunningTests.md +88 -0
  54. data/doc/{TempFileHandling.md → SecureTempFileHandling.md} +1 -1
  55. data/doc/{CxxTestingGuide.md → WritingCxxTests.md} +1 -20
  56. data/src/agent/AgentMain.cpp +1 -1
  57. data/src/agent/Core/ApiServer.h +1 -1
  58. data/src/agent/Core/ApplicationPool/AbstractSession.h +1 -1
  59. data/src/agent/Core/ApplicationPool/BasicGroupInfo.h +1 -1
  60. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +1 -1
  61. data/src/agent/Core/ApplicationPool/Common.h +1 -1
  62. data/src/agent/Core/ApplicationPool/Context.h +1 -1
  63. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +1 -1
  64. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +1 -1
  65. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +1 -1
  66. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +1 -1
  67. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +1 -1
  68. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
  69. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +1 -1
  70. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +1 -1
  71. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -1
  72. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +1 -1
  73. data/src/agent/Core/ApplicationPool/Group.h +1 -1
  74. data/src/agent/Core/ApplicationPool/Implementation.cpp +1 -1
  75. data/src/agent/Core/ApplicationPool/Options.h +1 -1
  76. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +1 -1
  77. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
  78. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +1 -1
  79. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +1 -1
  80. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +1 -1
  81. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +1 -1
  82. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +1 -1
  83. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  84. data/src/agent/Core/ApplicationPool/Pool.h +1 -1
  85. data/src/agent/Core/ApplicationPool/Process.cpp +1 -1
  86. data/src/agent/Core/ApplicationPool/Process.h +1 -1
  87. data/src/agent/Core/ApplicationPool/Session.h +1 -1
  88. data/src/agent/Core/ApplicationPool/Socket.h +1 -1
  89. data/src/agent/Core/ApplicationPool/TestSession.h +1 -1
  90. data/src/agent/Core/Config.h +3 -2
  91. data/src/agent/Core/ConfigChange.cpp +1 -1
  92. data/src/agent/Core/ConfigChange.h +1 -1
  93. data/src/agent/Core/Controller/AppResponse.h +1 -1
  94. data/src/agent/Core/Controller/BufferBody.cpp +1 -1
  95. data/src/agent/Core/Controller/CheckoutSession.cpp +8 -5
  96. data/src/agent/Core/Controller/Client.h +1 -1
  97. data/src/agent/Core/Controller/Config.cpp +1 -1
  98. data/src/agent/Core/Controller/Config.h +2 -2
  99. data/src/agent/Core/Controller/ForwardResponse.cpp +2 -2
  100. data/src/agent/Core/Controller/Hooks.cpp +12 -9
  101. data/src/agent/Core/Controller/Implementation.cpp +1 -1
  102. data/src/agent/Core/Controller/InitRequest.cpp +1 -1
  103. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -1
  104. data/src/agent/Core/Controller/InternalUtils.cpp +1 -1
  105. data/src/agent/Core/Controller/Miscellaneous.cpp +1 -1
  106. data/src/agent/Core/Controller/Request.h +1 -1
  107. data/src/agent/Core/Controller/SendRequest.cpp +1 -1
  108. data/src/agent/Core/Controller/StateInspection.cpp +1 -1
  109. data/src/agent/Core/Controller/TurboCaching.h +1 -1
  110. data/src/agent/Core/Controller.h +1 -1
  111. data/src/agent/Core/CoreMain.cpp +1 -1
  112. data/src/agent/Core/OptionParser.h +1 -1
  113. data/src/agent/Core/ResponseCache.h +1 -1
  114. data/src/agent/Core/SecurityUpdateChecker.h +1 -1
  115. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +1 -1
  116. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h.cxxcodebuilder +1 -1
  117. data/src/agent/Core/SpawningKit/Config.h +1 -1
  118. data/src/agent/Core/SpawningKit/Context.h +1 -1
  119. data/src/agent/Core/SpawningKit/DirectSpawner.h +1 -1
  120. data/src/agent/Core/SpawningKit/DummySpawner.h +1 -1
  121. data/src/agent/Core/SpawningKit/ErrorRenderer.h +1 -1
  122. data/src/agent/Core/SpawningKit/Exceptions.h +63 -2
  123. data/src/agent/Core/SpawningKit/Factory.h +1 -1
  124. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +1 -1
  125. data/src/agent/Core/SpawningKit/Handshake/Perform.h +3 -2
  126. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -1
  127. data/src/agent/Core/SpawningKit/Handshake/Session.h +1 -1
  128. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +1 -1
  129. data/src/agent/Core/SpawningKit/Journey.h +1 -1
  130. data/src/agent/Core/SpawningKit/PipeWatcher.h +1 -1
  131. data/src/agent/Core/SpawningKit/README.md +3 -3
  132. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h +1 -1
  133. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h.cxxcodebuilder +1 -1
  134. data/src/agent/Core/SpawningKit/Result.h +1 -1
  135. data/src/agent/Core/SpawningKit/SmartSpawner.h +17 -17
  136. data/src/agent/Core/SpawningKit/Spawner.h +1 -1
  137. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +1 -1
  138. data/src/agent/Core/TelemetryCollector.h +1 -1
  139. data/src/agent/ExecHelper/ExecHelperMain.cpp +1 -1
  140. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +1 -1
  141. data/src/agent/MainFunctions.h +1 -1
  142. data/src/agent/Shared/ApiAccountUtils.h +4 -3
  143. data/src/agent/Shared/ApiServerUtils.h +2 -3
  144. data/src/agent/Shared/ApplicationPoolApiKey.h +1 -1
  145. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +1 -1
  146. data/src/agent/Shared/Fundamentals/AbortHandler.h +1 -1
  147. data/src/agent/Shared/Fundamentals/Initialization.cpp +1 -1
  148. data/src/agent/Shared/Fundamentals/Initialization.h +1 -1
  149. data/src/agent/Shared/Fundamentals/Utils.cpp +1 -1
  150. data/src/agent/Shared/Fundamentals/Utils.h +1 -1
  151. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +1 -1
  152. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +1 -1
  153. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +1 -1
  154. data/src/agent/Watchdog/ApiServer.h +7 -6
  155. data/src/agent/Watchdog/Config.h +2 -2
  156. data/src/apache2_module/Bucket.cpp +1 -1
  157. data/src/apache2_module/Bucket.h +1 -1
  158. data/src/apache2_module/CBindings.cpp +1 -1
  159. data/src/apache2_module/Config.cpp +1 -1
  160. data/src/apache2_module/Config.h +1 -1
  161. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +104 -104
  162. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder +2 -2
  163. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +1 -1
  164. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp.cxxcodebuilder +1 -1
  165. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +1 -1
  166. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +1 -1
  167. data/src/apache2_module/ConfigGeneral/Common.h +1 -1
  168. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +1 -1
  169. data/src/apache2_module/ConfigGeneral/SetterFuncs.h +1 -1
  170. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +1 -1
  171. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder +1 -1
  172. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +1 -1
  173. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder +1 -1
  174. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +1 -1
  175. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +1 -1
  176. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +1 -1
  177. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +1 -1
  178. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +1 -1
  179. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +1 -1
  180. data/src/apache2_module/DirectoryMapper.h +1 -1
  181. data/src/apache2_module/Hooks.cpp +21 -2
  182. data/src/apache2_module/Hooks.h +1 -1
  183. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +1 -1
  184. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +1 -1
  185. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +1 -1
  186. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +1 -1
  187. data/src/apache2_module/Utils.h +15 -1
  188. data/src/apache2_module/mod_passenger.c +1 -1
  189. data/src/cxx_supportlib/Algorithms/Hasher.cpp +1 -1
  190. data/src/cxx_supportlib/Algorithms/Hasher.h +1 -1
  191. data/src/cxx_supportlib/Algorithms/MovingAverage.h +1 -1
  192. data/src/cxx_supportlib/AppLocalConfigFileUtils.h +1 -1
  193. data/src/cxx_supportlib/AppTypeDetector/CBindings.cpp +1 -1
  194. data/src/cxx_supportlib/AppTypeDetector/CBindings.h +1 -1
  195. data/src/cxx_supportlib/AppTypeDetector/Detector.h +1 -1
  196. data/src/cxx_supportlib/BackgroundEventLoop.cpp +1 -1
  197. data/src/cxx_supportlib/BackgroundEventLoop.h +1 -1
  198. data/src/cxx_supportlib/ConfigKit/AsyncUtils.h +1 -1
  199. data/src/cxx_supportlib/ConfigKit/Common.h +1 -1
  200. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +1 -1
  201. data/src/cxx_supportlib/ConfigKit/DummyTranslator.h +1 -1
  202. data/src/cxx_supportlib/ConfigKit/IN_PRACTICE.md +1 -3
  203. data/src/cxx_supportlib/ConfigKit/PrefixTranslator.h +3 -3
  204. data/src/cxx_supportlib/ConfigKit/Schema.h +1 -1
  205. data/src/cxx_supportlib/ConfigKit/SchemaUtils.h +1 -1
  206. data/src/cxx_supportlib/ConfigKit/Store.h +1 -1
  207. data/src/cxx_supportlib/ConfigKit/SubComponentUtils.h +1 -1
  208. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +1 -1
  209. data/src/cxx_supportlib/ConfigKit/Translator.h +1 -1
  210. data/src/cxx_supportlib/ConfigKit/Utils.h +1 -1
  211. data/src/cxx_supportlib/Constants.h +2 -2
  212. data/src/cxx_supportlib/Constants.h.cxxcodebuilder +1 -1
  213. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +1 -1
  214. data/src/cxx_supportlib/DataStructures/LString.cpp +1 -1
  215. data/src/cxx_supportlib/DataStructures/LString.h +1 -1
  216. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +1 -1
  217. data/src/cxx_supportlib/DataStructures/StringMap.h +1 -1
  218. data/src/cxx_supportlib/Exceptions.cpp +1 -1
  219. data/src/cxx_supportlib/Exceptions.h +1 -1
  220. data/src/cxx_supportlib/FileDescriptor.h +1 -1
  221. data/src/cxx_supportlib/FileTools/FileManip.cpp +28 -4
  222. data/src/cxx_supportlib/FileTools/FileManip.h +1 -1
  223. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  224. data/src/cxx_supportlib/FileTools/PathManip.h +1 -1
  225. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +1 -1
  226. data/src/cxx_supportlib/FileTools/PathManipCBindings.h +1 -1
  227. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +1 -1
  228. data/src/cxx_supportlib/FileTools/PathSecurityCheck.h +1 -1
  229. data/src/cxx_supportlib/Hooks.h +1 -1
  230. data/src/cxx_supportlib/IOTools/BufferedIO.h +1 -1
  231. data/src/cxx_supportlib/IOTools/IOUtils.cpp +10 -10
  232. data/src/cxx_supportlib/IOTools/IOUtils.h +1 -1
  233. data/src/cxx_supportlib/IOTools/MessageIO.h +1 -1
  234. data/src/cxx_supportlib/IOTools/MessageSerialization.h +1 -1
  235. data/src/cxx_supportlib/InstanceDirectory.h +31 -4
  236. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +1 -1
  237. data/src/cxx_supportlib/JsonTools/Autocast.h +1 -1
  238. data/src/cxx_supportlib/JsonTools/CBindings.cpp +1 -1
  239. data/src/cxx_supportlib/JsonTools/CBindings.h +1 -1
  240. data/src/cxx_supportlib/JsonTools/JsonUtils.h +1 -1
  241. data/src/cxx_supportlib/LoggingKit/Assert.h +1 -1
  242. data/src/cxx_supportlib/LoggingKit/Config.h +2 -1
  243. data/src/cxx_supportlib/LoggingKit/Context.h +1 -1
  244. data/src/cxx_supportlib/LoggingKit/Forward.h +1 -1
  245. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +11 -1
  246. data/src/cxx_supportlib/LoggingKit/Logging.h +1 -1
  247. data/src/cxx_supportlib/LoggingKit/LoggingKit.h +1 -1
  248. data/src/cxx_supportlib/LveLoggingDecorator.h +1 -1
  249. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +1 -1
  250. data/src/cxx_supportlib/MemoryKit/mbuf.h +1 -1
  251. data/src/cxx_supportlib/MemoryKit/palloc.cpp +1 -1
  252. data/src/cxx_supportlib/MemoryKit/palloc.h +1 -1
  253. data/src/cxx_supportlib/ProcessManagement/Ruby.cpp +1 -1
  254. data/src/cxx_supportlib/ProcessManagement/Ruby.h +1 -1
  255. data/src/cxx_supportlib/ProcessManagement/Spawn.cpp +1 -1
  256. data/src/cxx_supportlib/ProcessManagement/Spawn.h +1 -1
  257. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +1 -1
  258. data/src/cxx_supportlib/ProcessManagement/Utils.h +1 -1
  259. data/src/cxx_supportlib/RandomGenerator.h +1 -1
  260. data/src/cxx_supportlib/ResourceLocator.h +1 -1
  261. data/src/cxx_supportlib/SafeLibev.h +1 -1
  262. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +9 -27
  263. data/src/cxx_supportlib/SecurityKit/Crypto.h +2 -2
  264. data/src/cxx_supportlib/SecurityKit/MemZeroGuard.h +1 -1
  265. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +1 -1
  266. data/src/cxx_supportlib/ServerKit/Channel.h +1 -1
  267. data/src/cxx_supportlib/ServerKit/Client.h +1 -1
  268. data/src/cxx_supportlib/ServerKit/ClientRef.h +1 -1
  269. data/src/cxx_supportlib/ServerKit/Config.h +1 -1
  270. data/src/cxx_supportlib/ServerKit/Context.h +1 -1
  271. data/src/cxx_supportlib/ServerKit/CookieUtils.h +1 -1
  272. data/src/cxx_supportlib/ServerKit/Errors.h +2 -2
  273. data/src/cxx_supportlib/ServerKit/FdSinkChannel.h +1 -1
  274. data/src/cxx_supportlib/ServerKit/FdSourceChannel.h +1 -1
  275. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +54 -2
  276. data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +1 -1
  277. data/src/cxx_supportlib/ServerKit/HeaderTable.h +1 -1
  278. data/src/cxx_supportlib/ServerKit/Hooks.h +1 -1
  279. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
  280. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParserState.h +1 -1
  281. data/src/cxx_supportlib/ServerKit/HttpClient.h +1 -1
  282. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +2 -2
  283. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +2 -2
  284. data/src/cxx_supportlib/ServerKit/HttpRequest.h +2 -2
  285. data/src/cxx_supportlib/ServerKit/HttpRequestRef.h +1 -1
  286. data/src/cxx_supportlib/ServerKit/HttpServer.h +1 -1
  287. data/src/cxx_supportlib/ServerKit/Implementation.cpp +1 -1
  288. data/src/cxx_supportlib/ServerKit/Server.h +4 -2
  289. data/src/cxx_supportlib/ServerKit/llerrors.h +3 -3
  290. data/src/cxx_supportlib/ServerKit/llversion.h +1 -1
  291. data/src/cxx_supportlib/StaticString.h +1 -1
  292. data/src/cxx_supportlib/StrIntTools/DateParsing.h +1 -1
  293. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +1 -1
  294. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +1 -1
  295. data/src/cxx_supportlib/StrIntTools/StrIntUtilsNoStrictAliasing.cpp +1 -1
  296. data/src/cxx_supportlib/StrIntTools/StringScanning.h +1 -1
  297. data/src/cxx_supportlib/StrIntTools/Template.h +1 -1
  298. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +1 -1
  299. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +1 -1
  300. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +1 -1
  301. data/src/cxx_supportlib/SystemTools/SystemTime.cpp +1 -1
  302. data/src/cxx_supportlib/SystemTools/SystemTime.h +1 -1
  303. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +1 -1
  304. data/src/cxx_supportlib/SystemTools/UserDatabase.h +1 -1
  305. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +1 -1
  306. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +1 -1
  307. data/src/cxx_supportlib/Utils/BlockingQueue.h +1 -1
  308. data/src/cxx_supportlib/Utils/CachedFileStat.cpp +1 -1
  309. data/src/cxx_supportlib/Utils/CachedFileStat.h +1 -1
  310. data/src/cxx_supportlib/Utils/CachedFileStat.hpp +1 -1
  311. data/src/cxx_supportlib/Utils/ClassUtils.h +1 -1
  312. data/src/cxx_supportlib/Utils/Curl.h +1 -1
  313. data/src/cxx_supportlib/Utils/FastStringStream.h +1 -1
  314. data/src/cxx_supportlib/Utils/FileChangeChecker.h +1 -1
  315. data/src/cxx_supportlib/Utils/HttpConstants.h +1 -1
  316. data/src/cxx_supportlib/Utils/IniFile.h +1 -1
  317. data/src/cxx_supportlib/Utils/MessagePassing.h +1 -1
  318. data/src/cxx_supportlib/Utils/OptionParsing.h +1 -1
  319. data/src/cxx_supportlib/Utils/ReleaseableScopedPointer.h +1 -1
  320. data/src/cxx_supportlib/Utils/ScopeGuard.h +1 -1
  321. data/src/cxx_supportlib/Utils/SpeedMeter.h +1 -1
  322. data/src/cxx_supportlib/Utils/Timer.h +1 -1
  323. data/src/cxx_supportlib/Utils/VariantMap.h +1 -1
  324. data/src/cxx_supportlib/Utils.cpp +1 -1
  325. data/src/cxx_supportlib/Utils.h +1 -1
  326. data/src/cxx_supportlib/WatchdogLauncher.cpp +1 -1
  327. data/src/cxx_supportlib/WatchdogLauncher.h +1 -1
  328. data/src/cxx_supportlib/WrapperRegistry/CBindings.cpp +1 -1
  329. data/src/cxx_supportlib/WrapperRegistry/CBindings.h +1 -1
  330. data/src/cxx_supportlib/WrapperRegistry/Entry.h +1 -1
  331. data/src/cxx_supportlib/WrapperRegistry/Registry.h +1 -1
  332. data/src/cxx_supportlib/oxt/backtrace.hpp +1 -1
  333. data/src/cxx_supportlib/oxt/detail/backtrace_disabled.hpp +1 -1
  334. data/src/cxx_supportlib/oxt/detail/backtrace_enabled.hpp +1 -1
  335. data/src/cxx_supportlib/oxt/detail/context.hpp +1 -1
  336. data/src/cxx_supportlib/oxt/detail/tracable_exception_disabled.hpp +1 -1
  337. data/src/cxx_supportlib/oxt/detail/tracable_exception_enabled.hpp +1 -1
  338. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +1 -1
  339. data/src/cxx_supportlib/oxt/implementation.cpp +1 -1
  340. data/src/cxx_supportlib/oxt/initialize.hpp +1 -1
  341. data/src/cxx_supportlib/oxt/macros.hpp +1 -1
  342. data/src/cxx_supportlib/oxt/spin_lock.hpp +1 -1
  343. data/src/cxx_supportlib/oxt/system_calls.cpp +1 -1
  344. data/src/cxx_supportlib/oxt/system_calls.hpp +1 -1
  345. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  346. data/src/cxx_supportlib/oxt/tracable_exception.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-copy/adhoc_lve.h +1 -1
  348. data/src/cxx_supportlib/vendor-copy/libuv/AUTHORS +353 -3
  349. data/src/cxx_supportlib/vendor-copy/libuv/ChangeLog +3981 -2
  350. data/src/cxx_supportlib/vendor-copy/libuv/LICENSE +1 -28
  351. data/src/cxx_supportlib/vendor-copy/libuv/LICENSE-docs +396 -0
  352. data/src/cxx_supportlib/vendor-copy/libuv/LICENSE-extra +36 -0
  353. data/src/cxx_supportlib/vendor-copy/libuv/Makefile.am +275 -58
  354. data/src/cxx_supportlib/vendor-copy/libuv/Makefile.in +4380 -2125
  355. data/src/cxx_supportlib/vendor-copy/libuv/aclocal.m4 +425 -221
  356. data/src/cxx_supportlib/vendor-copy/libuv/ar-lib +30 -10
  357. data/src/cxx_supportlib/vendor-copy/libuv/compile +31 -14
  358. data/src/cxx_supportlib/vendor-copy/libuv/config.guess +1084 -690
  359. data/src/cxx_supportlib/vendor-copy/libuv/config.sub +1844 -1297
  360. data/src/cxx_supportlib/vendor-copy/libuv/configure +6935 -3664
  361. data/src/cxx_supportlib/vendor-copy/libuv/configure.ac +43 -19
  362. data/src/cxx_supportlib/vendor-copy/libuv/depcomp +12 -11
  363. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-darwin.h → uv/darwin.h} +3 -3
  364. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-errno.h → uv/errno.h} +119 -60
  365. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-linux.h → uv/linux.h} +1 -1
  366. data/src/cxx_supportlib/vendor-copy/libuv/include/uv/os390.h +33 -0
  367. data/src/cxx_supportlib/vendor-copy/libuv/include/uv/posix.h +31 -0
  368. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-threadpool.h → uv/threadpool.h} +1 -1
  369. data/src/cxx_supportlib/vendor-copy/libuv/include/{tree.h → uv/tree.h} +3 -250
  370. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-unix.h → uv/unix.h} +186 -60
  371. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-version.h → uv/version.h} +3 -3
  372. data/src/cxx_supportlib/vendor-copy/libuv/include/uv/win.h +703 -0
  373. data/src/cxx_supportlib/vendor-copy/libuv/include/uv.h +528 -40
  374. data/src/cxx_supportlib/vendor-copy/libuv/install-sh +110 -70
  375. data/src/cxx_supportlib/vendor-copy/libuv/libuv-static.pc.in +12 -0
  376. data/src/cxx_supportlib/vendor-copy/libuv/libuv.pc.in +4 -2
  377. data/src/cxx_supportlib/vendor-copy/libuv/ltmain.sh +995 -619
  378. data/src/cxx_supportlib/vendor-copy/libuv/m4/ax_pthread.m4 +485 -0
  379. data/src/cxx_supportlib/vendor-copy/libuv/m4/libtool.m4 +438 -289
  380. data/src/cxx_supportlib/vendor-copy/libuv/m4/libuv-check-flags.m4 +21 -4
  381. data/src/cxx_supportlib/vendor-copy/libuv/m4/libuv-check-versions.m4 +7 -0
  382. data/src/cxx_supportlib/vendor-copy/libuv/m4/ltoptions.m4 +69 -39
  383. data/src/cxx_supportlib/vendor-copy/libuv/m4/ltsugar.m4 +1 -1
  384. data/src/cxx_supportlib/vendor-copy/libuv/m4/ltversion.m4 +7 -6
  385. data/src/cxx_supportlib/vendor-copy/libuv/m4/lt~obsolete.m4 +2 -2
  386. data/src/cxx_supportlib/vendor-copy/libuv/missing +55 -34
  387. data/src/cxx_supportlib/vendor-copy/libuv/src/fs-poll.c +52 -20
  388. data/src/cxx_supportlib/vendor-copy/libuv/src/idna.c +560 -0
  389. data/src/cxx_supportlib/vendor-copy/libuv/src/idna.h +31 -0
  390. data/src/cxx_supportlib/vendor-copy/libuv/src/inet.c +5 -16
  391. data/src/cxx_supportlib/vendor-copy/libuv/src/queue.h +68 -86
  392. data/src/cxx_supportlib/vendor-copy/libuv/src/random.c +123 -0
  393. data/src/cxx_supportlib/vendor-copy/libuv/src/strscpy.c +38 -0
  394. data/src/cxx_supportlib/vendor-copy/libuv/src/strscpy.h +39 -0
  395. data/src/cxx_supportlib/vendor-copy/libuv/src/strtok.c +52 -0
  396. data/src/cxx_supportlib/vendor-copy/libuv/src/strtok.h +27 -0
  397. data/src/cxx_supportlib/vendor-copy/libuv/src/thread-common.c +175 -0
  398. data/src/cxx_supportlib/vendor-copy/libuv/src/threadpool.c +172 -57
  399. data/src/cxx_supportlib/vendor-copy/libuv/src/{unix/timer.c → timer.c} +57 -29
  400. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/aix-common.c +89 -0
  401. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/aix.c +418 -256
  402. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/async.c +168 -129
  403. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/bsd-ifaddrs.c +163 -0
  404. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/bsd-proctitle.c +99 -0
  405. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/core.c +1312 -378
  406. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/cygwin.c +93 -0
  407. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin-proctitle.c +18 -32
  408. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin-stub.h +97 -0
  409. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin-syscalls.h +17 -0
  410. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin.c +41 -139
  411. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/dl.c +1 -1
  412. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/freebsd.c +75 -235
  413. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fs.c +1308 -299
  414. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fsevents.c +150 -148
  415. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/getaddrinfo.c +58 -8
  416. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/getnameinfo.c +3 -2
  417. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/haiku.c +172 -0
  418. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/hurd.c +172 -0
  419. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/ibmi.c +542 -0
  420. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/internal.h +297 -106
  421. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/kqueue.c +325 -94
  422. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux.c +2708 -0
  423. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop-watcher.c +11 -11
  424. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop.c +105 -24
  425. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/netbsd.c +51 -157
  426. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/no-fsevents.c +42 -0
  427. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/no-proctitle.c +45 -0
  428. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/openbsd.c +42 -183
  429. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390-proctitle.c +136 -0
  430. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390-syscalls.c +536 -0
  431. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390-syscalls.h +75 -0
  432. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390.c +1070 -0
  433. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pipe.c +324 -55
  434. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/poll.c +58 -11
  435. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/posix-hrtime.c +36 -0
  436. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/posix-poll.c +385 -0
  437. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/process.c +795 -248
  438. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/procfs-exepath.c +45 -0
  439. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/proctitle.c +77 -22
  440. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/qnx.c +142 -0
  441. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-devurandom.c +93 -0
  442. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-getentropy.c +57 -0
  443. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-getrandom.c +86 -0
  444. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-sysctl-linux.c +99 -0
  445. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/signal.c +147 -39
  446. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/stream.c +426 -474
  447. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sunos.c +240 -98
  448. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sysinfo-loadavg.c +36 -0
  449. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sysinfo-memory.c +42 -0
  450. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tcp.c +402 -91
  451. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/thread.c +497 -145
  452. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tty.c +269 -45
  453. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/udp.c +695 -165
  454. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.c +463 -61
  455. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.h +248 -44
  456. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-data-getter-setters.c +119 -0
  457. data/src/cxx_supportlib/vendor-copy/libuv/tsansupp.txt +2 -0
  458. data/src/cxx_supportlib/{ServerKit/llhttp_api.c → vendor-copy/llhttp/api.c} +30 -23
  459. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.c +1756 -1645
  460. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.h +35 -13
  461. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +19 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +0 -2
  464. data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +20 -13
  465. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +2 -2
  466. data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +4 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +1 -1
  468. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +4 -0
  469. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  470. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +1 -1
  473. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +1 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  476. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +10 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +5 -3
  478. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +1 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +5 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +57 -53
  481. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -10
  482. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -2
  483. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +14 -2
  484. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +176 -2287
  485. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +13 -9
  486. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +186 -70
  487. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +2 -2
  488. data/src/cxx_supportlib/vendor-modified/boost/container/detail/aligned_allocation.hpp +149 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +35 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +1 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/container/detail/bit_utilities.hpp +133 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +18 -3
  493. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +5 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +4 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +1 -1
  496. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +20 -10
  497. data/src/cxx_supportlib/vendor-modified/boost/container/detail/deque_impl.hpp +2744 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +202 -104
  499. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +5 -4
  500. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +161 -85
  501. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_constructible.hpp +180 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +3 -2
  503. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +12 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +16 -0
  505. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +1 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +9 -1
  507. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +18 -14
  508. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +256 -41
  509. data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +75 -24
  510. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +1 -56
  511. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +16 -3
  512. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -7
  513. data/src/cxx_supportlib/vendor-modified/boost/container/detail/range_utils.hpp +196 -0
  514. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +33 -1
  515. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +124 -69
  516. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +109 -7
  517. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +168 -162
  518. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/nest.hpp +2978 -0
  519. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/pmr/nest.hpp +45 -0
  520. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_all_of.hpp +43 -0
  521. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_any_of.hpp +42 -0
  522. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy.hpp +229 -0
  523. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_if.hpp +270 -0
  524. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_n.hpp +308 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count.hpp +101 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count_if.hpp +100 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_equal.hpp +268 -0
  528. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill.hpp +101 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill_n.hpp +171 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find.hpp +110 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if.hpp +110 -0
  532. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if_not.hpp +43 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last.hpp +179 -0
  534. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if.hpp +179 -0
  535. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if_not.hpp +43 -0
  536. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_for_each.hpp +92 -0
  537. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate.hpp +90 -0
  538. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate_n.hpp +162 -0
  539. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_partitioned.hpp +46 -0
  540. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted.hpp +49 -0
  541. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted_until.hpp +169 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp +382 -0
  543. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_merge.hpp +428 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_mismatch.hpp +350 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_none_of.hpp +98 -0
  546. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition.hpp +296 -0
  547. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_copy.hpp +105 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_point.hpp +116 -0
  549. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove.hpp +57 -0
  550. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy.hpp +207 -0
  551. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy_if.hpp +223 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_if.hpp +57 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace.hpp +90 -0
  554. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace_if.hpp +90 -0
  555. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse.hpp +245 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse_copy.hpp +229 -0
  557. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search.hpp +211 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search_n.hpp +476 -0
  559. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_difference.hpp +300 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_intersection.hpp +287 -0
  561. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_symmetric_difference.hpp +306 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_union.hpp +294 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_stable_partition.hpp +153 -0
  564. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_swap_ranges.hpp +92 -0
  565. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_transform.hpp +93 -0
  566. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/wrapped_iterator.hpp +142 -0
  567. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +642 -417
  568. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +141 -30
  569. data/src/cxx_supportlib/vendor-modified/boost/container/hub.hpp +2426 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +65 -57
  571. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +247 -68
  572. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +7 -0
  573. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +39 -33
  574. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +156 -23
  575. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +3 -3
  576. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/hub.hpp +43 -0
  577. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +5 -3
  578. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -0
  579. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -1
  580. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +4 -0
  581. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/segtor.hpp +45 -0
  582. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +5 -4
  583. data/src/cxx_supportlib/vendor-modified/boost/container/segtor.hpp +905 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +148 -35
  585. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +59 -52
  586. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +632 -5
  587. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +66 -60
  588. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +46 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +612 -317
  590. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +54 -111
  591. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_construction.hpp +100 -0
  592. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +1 -3
  593. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +233 -116
  594. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +17 -10
  596. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -3
  597. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +16 -0
  598. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/encoder.hpp +114 -0
  599. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +4 -0
  600. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +1 -1
  601. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +211 -1
  602. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +59 -0
  603. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +6 -0
  604. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +34 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +0 -1
  606. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +12 -3
  607. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  608. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +29 -174
  609. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +18 -2
  610. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +0 -1
  611. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +4 -5
  612. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +20 -11
  613. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +42 -14
  614. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +58 -22
  615. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +3 -1
  616. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +5 -1
  617. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +8 -2
  618. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +9 -0
  619. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +11 -1
  620. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +9 -1
  621. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/config.hpp +22 -0
  622. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +15 -7
  623. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +23 -11
  624. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +11 -1
  625. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +9 -1
  626. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +11 -2
  627. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +10 -1
  628. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +8 -1
  629. data/src/cxx_supportlib/vendor-modified/boost/{detail → lexical_cast/detail}/lcast_precision.hpp +13 -1
  630. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +11 -1
  631. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -2
  632. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +15 -2
  633. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +11 -1
  634. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
  635. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +48 -46
  636. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +23 -0
  637. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  638. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +12 -4
  639. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +76 -0
  640. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +1 -1
  641. data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +11 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +58 -37
  643. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +1 -2
  644. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +17 -9
  645. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +1 -2
  646. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +6 -0
  647. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  648. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +6 -1
  649. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_common_defs.hpp +188 -0
  650. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +0 -6
  651. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +1 -1
  652. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_nonmember_interface.hpp +117 -0
  653. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +108 -83
  654. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +39 -39
  655. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_select_implementation.hpp +37 -0
  656. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +1 -1
  657. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +8 -8
  658. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/union_optional.hpp +724 -0
  659. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +93 -220
  660. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +14 -4
  661. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +1 -1
  662. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +1 -1
  663. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +1 -1
  664. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1 -1
  665. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -6
  666. data/src/cxx_supportlib/vendor-modified/boost/system/api_config.hpp +1 -1
  667. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
  668. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +13 -13
  669. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +5 -5
  670. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +3 -2
  671. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +3 -2
  672. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +2 -1
  673. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +1 -1
  674. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +30 -28
  675. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +6 -3
  676. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +5 -1
  677. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +1 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +16 -16
  679. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +26 -26
  680. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +196 -6
  681. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +191 -6
  682. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +196 -5
  683. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +192 -5
  684. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +3 -3
  685. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2 -2
  686. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +3 -3
  687. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +52 -16
  688. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/ranges_support.hpp +104 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +1 -14
  690. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unordered_printers.hpp +10 -4
  691. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +121 -3
  692. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +118 -3
  693. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +338 -1
  694. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +121 -3
  695. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +118 -3
  696. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +333 -1
  697. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  698. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +276 -143
  699. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +1262 -771
  700. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1704 -1586
  701. data/src/cxx_supportlib/vendor-modified/libev/Changes +109 -0
  702. data/src/cxx_supportlib/vendor-modified/libev/Makefile.am +2 -1
  703. data/src/cxx_supportlib/vendor-modified/libev/Makefile.in +47 -33
  704. data/src/cxx_supportlib/vendor-modified/libev/README +2 -1
  705. data/src/cxx_supportlib/vendor-modified/libev/aclocal.m4 +1653 -1224
  706. data/src/cxx_supportlib/vendor-modified/libev/config.guess +376 -316
  707. data/src/cxx_supportlib/vendor-modified/libev/config.h.in +13 -2
  708. data/src/cxx_supportlib/vendor-modified/libev/config.sub +156 -154
  709. data/src/cxx_supportlib/vendor-modified/libev/configure +1431 -940
  710. data/src/cxx_supportlib/vendor-modified/libev/configure.ac +3 -3
  711. data/src/cxx_supportlib/vendor-modified/libev/depcomp +5 -5
  712. data/src/cxx_supportlib/vendor-modified/libev/ev++.h +109 -107
  713. data/src/cxx_supportlib/vendor-modified/libev/ev.c +807 -319
  714. data/src/cxx_supportlib/vendor-modified/libev/ev.h +111 -105
  715. data/src/cxx_supportlib/vendor-modified/libev/ev_epoll.c +42 -29
  716. data/src/cxx_supportlib/vendor-modified/libev/ev_iouring.c +694 -0
  717. data/src/cxx_supportlib/vendor-modified/libev/ev_kqueue.c +15 -9
  718. data/src/cxx_supportlib/vendor-modified/libev/ev_linuxaio.c +620 -0
  719. data/src/cxx_supportlib/vendor-modified/libev/ev_poll.c +19 -14
  720. data/src/cxx_supportlib/vendor-modified/libev/ev_port.c +8 -5
  721. data/src/cxx_supportlib/vendor-modified/libev/ev_select.c +6 -6
  722. data/src/cxx_supportlib/vendor-modified/libev/ev_vars.h +48 -3
  723. data/src/cxx_supportlib/vendor-modified/libev/ev_win32.c +2 -2
  724. data/src/cxx_supportlib/vendor-modified/libev/ev_wrap.h +72 -0
  725. data/src/cxx_supportlib/vendor-modified/libev/install-sh +23 -13
  726. data/src/cxx_supportlib/vendor-modified/libev/libev.m4 +6 -1
  727. data/src/cxx_supportlib/vendor-modified/libev/ltmain.sh +3581 -1993
  728. data/src/cxx_supportlib/vendor-modified/libev/missing +8 -8
  729. data/src/cxx_supportlib/vendor-modified/libev/mkinstalldirs +3 -3
  730. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +1 -1
  731. data/src/helper-scripts/backtrace-sanitizer.rb +1 -1
  732. data/src/helper-scripts/crash-watch.rb +1 -1
  733. data/src/helper-scripts/download_binaries/extconf.rb +1 -1
  734. data/src/helper-scripts/meteor-loader.rb +1 -1
  735. data/src/helper-scripts/node-loader.js +1 -1
  736. data/src/helper-scripts/prespawn +1 -1
  737. data/src/helper-scripts/rack-loader.rb +1 -1
  738. data/src/helper-scripts/rack-preloader.rb +1 -1
  739. data/src/helper-scripts/wsgi-loader.py +1 -1
  740. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +1 -1
  741. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder +1 -1
  742. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +1 -1
  743. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +1 -1
  744. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +1 -1
  745. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +1 -1
  746. data/src/nginx_module/Configuration.c +1 -1
  747. data/src/nginx_module/Configuration.h +1 -1
  748. data/src/nginx_module/ContentHandler.c +36 -1
  749. data/src/nginx_module/ContentHandler.h +1 -1
  750. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +1 -1
  751. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +1 -1
  752. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +1 -1
  753. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder +1 -1
  754. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +1 -1
  755. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +1 -1
  756. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +1 -1
  757. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder +1 -1
  758. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +1 -1
  759. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder +1 -1
  760. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +1 -1
  761. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +1 -1
  762. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +1 -1
  763. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +1 -1
  764. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +1 -1
  765. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +1 -1
  766. data/src/nginx_module/StaticContentHandler.c +1 -1
  767. data/src/nginx_module/StaticContentHandler.h +1 -1
  768. data/src/nginx_module/ngx_http_passenger_module.c +1 -1
  769. data/src/nginx_module/ngx_http_passenger_module.h +1 -1
  770. data/src/nodejs_supportlib/phusion_passenger/line_reader.js +1 -1
  771. data/src/ruby_native_extension/extconf.rb +1 -1
  772. data/src/ruby_native_extension/passenger_native_support.c +1 -1
  773. data/src/ruby_supportlib/phusion_passenger/abstract_installer.rb +1 -1
  774. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +1 -1
  775. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +1 -1
  776. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +2 -12
  777. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +1 -1
  778. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -1
  779. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +1 -1
  780. data/src/ruby_supportlib/phusion_passenger/common_library.rb +14 -16
  781. data/src/ruby_supportlib/phusion_passenger/config/about_command.rb +1 -1
  782. data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +1 -1
  783. data/src/ruby_supportlib/phusion_passenger/config/api_call_command.rb +1 -1
  784. data/src/ruby_supportlib/phusion_passenger/config/build_native_support_command.rb +1 -1
  785. data/src/ruby_supportlib/phusion_passenger/config/command.rb +1 -1
  786. data/src/ruby_supportlib/phusion_passenger/config/compile_agent_command.rb +1 -1
  787. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +1 -1
  788. data/src/ruby_supportlib/phusion_passenger/config/detach_process_command.rb +1 -1
  789. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +1 -1
  790. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +1 -1
  791. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +1 -1
  792. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +1 -1
  793. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
  794. data/src/ruby_supportlib/phusion_passenger/config/list_instances_command.rb +1 -1
  795. data/src/ruby_supportlib/phusion_passenger/config/main.rb +1 -1
  796. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +3 -2
  797. data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +6 -1
  798. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +1 -1
  799. data/src/ruby_supportlib/phusion_passenger/config/system_metrics_command.rb +1 -1
  800. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +1 -1
  801. data/src/ruby_supportlib/phusion_passenger/config/utils.rb +1 -1
  802. data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +1 -1
  803. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +1 -1
  804. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -1
  805. data/src/ruby_supportlib/phusion_passenger/debug_logging.rb +1 -1
  806. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -1
  807. data/src/ruby_supportlib/phusion_passenger/message_channel.rb +1 -1
  808. data/src/ruby_supportlib/phusion_passenger/message_client.rb +1 -1
  809. data/src/ruby_supportlib/phusion_passenger/native_support.rb +1 -1
  810. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +1 -1
  811. data/src/ruby_supportlib/phusion_passenger/packaging.rb +4 -3
  812. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +1 -1
  813. data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +1 -1
  814. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +1 -1
  815. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +195 -11
  816. data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +1 -1
  817. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +1 -1
  818. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +1 -1
  819. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +1 -1
  820. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +1 -1
  821. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +1 -1
  822. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
  823. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +1 -1
  824. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +1 -1
  825. data/src/ruby_supportlib/phusion_passenger/platform_info/zlib.rb +1 -1
  826. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +1 -1
  827. data/src/ruby_supportlib/phusion_passenger/plugin.rb +1 -1
  828. data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +1 -1
  829. data/src/ruby_supportlib/phusion_passenger/public_api.rb +1 -1
  830. data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +1 -1
  831. data/src/ruby_supportlib/phusion_passenger/rack/out_of_band_gc.rb +1 -1
  832. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +1 -1
  833. data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +1 -1
  834. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -7
  835. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +1 -1
  836. data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +1 -1
  837. data/src/ruby_supportlib/phusion_passenger/ruby_core_io_enhancements.rb +1 -1
  838. data/src/ruby_supportlib/phusion_passenger/simple_benchmarking.rb +1 -1
  839. data/src/ruby_supportlib/phusion_passenger/standalone/app_finder.rb +1 -1
  840. data/src/ruby_supportlib/phusion_passenger/standalone/command.rb +1 -1
  841. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +1 -1
  842. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +1 -1
  843. data/src/ruby_supportlib/phusion_passenger/standalone/control_utils.rb +1 -1
  844. data/src/ruby_supportlib/phusion_passenger/standalone/main.rb +1 -1
  845. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +2 -2
  846. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +4 -8
  847. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -1
  848. data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +1 -1
  849. data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +1 -1
  850. data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +1 -1
  851. data/src/ruby_supportlib/phusion_passenger/utils/ansi_colors.rb +1 -1
  852. data/src/ruby_supportlib/phusion_passenger/utils/download.rb +1 -1
  853. data/src/ruby_supportlib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  854. data/src/ruby_supportlib/phusion_passenger/utils/hosts_file_parser.rb +1 -1
  855. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +25 -2
  856. data/src/ruby_supportlib/phusion_passenger/utils/lock.rb +1 -1
  857. data/src/ruby_supportlib/phusion_passenger/utils/native_support_utils.rb +1 -1
  858. data/src/ruby_supportlib/phusion_passenger/utils/progress_bar.rb +1 -1
  859. data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +1 -1
  860. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
  861. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +3 -13
  862. data/src/ruby_supportlib/phusion_passenger/utils.rb +1 -1
  863. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -1
  864. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/base.rb +1 -1
  865. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
  866. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +1 -1
  867. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/utils.rb +1 -1
  868. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/version.rb +1 -1
  869. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/lock_file.rb +8 -6
  870. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/spawn.rb +4 -3
  871. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/version.rb +6 -4
  872. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +406 -579
  873. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  874. data/src/schema_printer/SchemaPrinterMain.cpp +1 -1
  875. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +1 -1
  876. metadata +140 -38
  877. data/doc/DeveloperQuickstart.md +0 -70
  878. data/src/README.md +0 -7
  879. data/src/cxx_supportlib/vendor-copy/libuv/README.md +0 -245
  880. data/src/cxx_supportlib/vendor-copy/libuv/checksparse.sh +0 -234
  881. data/src/cxx_supportlib/vendor-copy/libuv/common.gypi +0 -210
  882. data/src/cxx_supportlib/vendor-copy/libuv/gyp_uv.py +0 -93
  883. data/src/cxx_supportlib/vendor-copy/libuv/include/android-ifaddrs.h +0 -54
  884. data/src/cxx_supportlib/vendor-copy/libuv/include/pthread-fixes.h +0 -72
  885. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/android-ifaddrs.c +0 -703
  886. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/atomic-ops.h +0 -77
  887. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-core.c +0 -899
  888. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-inotify.c +0 -285
  889. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.c +0 -471
  890. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.h +0 -158
  891. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pthread-fixes.c +0 -104
  892. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/spinlock.h +0 -53
  893. data/src/cxx_supportlib/vendor-copy/libuv/uv.gyp +0 -508
  894. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +0 -41
  895. /data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-aix.h → uv/aix.h} +0 -0
  896. /data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-bsd.h → uv/bsd.h} +0 -0
  897. /data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-sunos.h → uv/sunos.h} +0 -0
  898. /data/src/cxx_supportlib/{ServerKit/llhttp_http.c → vendor-copy/llhttp/http.c} +0 -0
@@ -0,0 +1,1070 @@
1
+ /* Copyright libuv project contributors. All rights reserved.
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to
5
+ * deal in the Software without restriction, including without limitation the
6
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ * sell copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ * IN THE SOFTWARE.
20
+ */
21
+
22
+ #include "uv.h"
23
+ #include "internal.h"
24
+ #include <sys/ioctl.h>
25
+ #include <net/if.h>
26
+ #include <utmpx.h>
27
+ #include <unistd.h>
28
+ #include <sys/ps.h>
29
+ #include <builtins.h>
30
+ #include <termios.h>
31
+ #include <sys/msg.h>
32
+ #include <sys/resource.h>
33
+ #include "zos-base.h"
34
+ #include "zos-sys-info.h"
35
+ #if defined(__clang__)
36
+ #include "csrsic.h"
37
+ #else
38
+ #include "//'SYS1.SAMPLIB(CSRSIC)'"
39
+ #endif
40
+
41
+ #define CVT_PTR 0x10
42
+ #define PSA_PTR 0x00
43
+ #define CSD_OFFSET 0x294
44
+
45
+ /*
46
+ Long-term average CPU service used by this logical partition,
47
+ in millions of service units per hour. If this value is above
48
+ the partition's defined capacity, the partition will be capped.
49
+ It is calculated using the physical CPU adjustment factor
50
+ (RCTPCPUA) so it may not match other measures of service which
51
+ are based on the logical CPU adjustment factor. It is available
52
+ if the hardware supports LPAR cluster.
53
+ */
54
+ #define RCTLACS_OFFSET 0xC4
55
+
56
+ /* 32-bit count of alive CPUs. This includes both CPs and IFAs */
57
+ #define CSD_NUMBER_ONLINE_CPUS 0xD4
58
+
59
+ /* Address of system resources manager (SRM) control table */
60
+ #define CVTOPCTP_OFFSET 0x25C
61
+
62
+ /* Address of the RCT table */
63
+ #define RMCTRCT_OFFSET 0xE4
64
+
65
+ /* Address of the rsm control and enumeration area. */
66
+ #define CVTRCEP_OFFSET 0x490
67
+
68
+ /* Total number of frames currently on all available frame queues. */
69
+ #define RCEAFC_OFFSET 0x088
70
+
71
+ /* Pointer to the home (current) ASCB. */
72
+ #define PSAAOLD 0x224
73
+
74
+ /* Pointer to rsm address space block extension. */
75
+ #define ASCBRSME 0x16C
76
+
77
+ /*
78
+ NUMBER OF FRAMES CURRENTLY IN USE BY THIS ADDRESS SPACE.
79
+ It does not include 2G frames.
80
+ */
81
+ #define RAXFMCT 0x2C
82
+
83
+ /* Thread Entry constants */
84
+ #define PGTH_CURRENT 1
85
+ #define PGTH_LEN 26
86
+ #define PGTHAPATH 0x20
87
+ #pragma linkage(BPX4GTH, OS)
88
+ #pragma linkage(BPX1GTH, OS)
89
+
90
+ /* TOD Clock resolution in nanoseconds */
91
+ #define TOD_RES 4.096
92
+
93
+ typedef unsigned data_area_ptr_assign_type;
94
+
95
+ typedef union {
96
+ struct {
97
+ #if defined(_LP64)
98
+ data_area_ptr_assign_type lower;
99
+ #endif
100
+ data_area_ptr_assign_type assign;
101
+ };
102
+ char* deref;
103
+ } data_area_ptr;
104
+
105
+
106
+ void uv_loadavg(double avg[3]) {
107
+ /* TODO: implement the following */
108
+ avg[0] = 0;
109
+ avg[1] = 0;
110
+ avg[2] = 0;
111
+ }
112
+
113
+
114
+ int uv__platform_loop_init(uv_loop_t* loop) {
115
+ uv__os390_epoll* ep;
116
+
117
+ ep = epoll_create1(0);
118
+ loop->ep = ep;
119
+ if (ep == NULL)
120
+ return UV__ERR(errno);
121
+
122
+ return 0;
123
+ }
124
+
125
+
126
+ void uv__platform_loop_delete(uv_loop_t* loop) {
127
+ if (loop->ep != NULL) {
128
+ epoll_queue_close(loop->ep);
129
+ loop->ep = NULL;
130
+ }
131
+ }
132
+
133
+
134
+ uint64_t uv__hrtime(uv_clocktype_t type) {
135
+ unsigned long long timestamp;
136
+ __stckf(&timestamp);
137
+ /* Convert to nanoseconds */
138
+ return timestamp / TOD_RES;
139
+ }
140
+
141
+
142
+ static int getexe(char* buf, size_t len) {
143
+ return uv__strscpy(buf, __getargv()[0], len);
144
+ }
145
+
146
+
147
+ /*
148
+ * We could use a static buffer for the path manipulations that we need outside
149
+ * of the function, but this function could be called by multiple consumers and
150
+ * we don't want to potentially create a race condition in the use of snprintf.
151
+ * There is no direct way of getting the exe path in zOS - either through /procfs
152
+ * or through some libc APIs. The below approach is to parse the argv[0]'s pattern
153
+ * and use it in conjunction with PATH environment variable to craft one.
154
+ */
155
+ int uv_exepath(char* buffer, size_t* size) {
156
+ int res;
157
+ char args[PATH_MAX];
158
+ int pid;
159
+
160
+ if (buffer == NULL || size == NULL || *size == 0)
161
+ return UV_EINVAL;
162
+
163
+ res = getexe(args, sizeof(args));
164
+ if (res < 0)
165
+ return UV_EINVAL;
166
+
167
+ return uv__search_path(args, buffer, size);
168
+ }
169
+
170
+
171
+ uint64_t uv_get_free_memory(void) {
172
+ uint64_t freeram;
173
+
174
+ data_area_ptr cvt = {0};
175
+ data_area_ptr rcep = {0};
176
+ cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR);
177
+ rcep.assign = *(data_area_ptr_assign_type*)(cvt.deref + CVTRCEP_OFFSET);
178
+ freeram = (uint64_t)*((uint32_t*)(rcep.deref + RCEAFC_OFFSET)) * 4096;
179
+ return freeram;
180
+ }
181
+
182
+
183
+ uint64_t uv_get_total_memory(void) {
184
+ /* Use CVTRLSTG to get the size of actual real storage online at IPL in K. */
185
+ return (uint64_t)((int)((char *__ptr32 *__ptr32 *)0)[4][214]) * 1024;
186
+ }
187
+
188
+
189
+ uint64_t uv_get_constrained_memory(void) {
190
+ struct rlimit rl;
191
+
192
+ /* RLIMIT_MEMLIMIT return value is in megabytes rather than bytes. */
193
+ if (getrlimit(RLIMIT_MEMLIMIT, &rl) == 0)
194
+ return rl.rlim_cur * 1024 * 1024;
195
+
196
+ return 0; /* There is no memory limit set. */
197
+ }
198
+
199
+
200
+ uint64_t uv_get_available_memory(void) {
201
+ return uv_get_free_memory();
202
+ }
203
+
204
+
205
+ int uv_resident_set_memory(size_t* rss) {
206
+ char* ascb;
207
+ char* rax;
208
+ size_t nframes;
209
+
210
+ ascb = *(char* __ptr32 *)(PSA_PTR + PSAAOLD);
211
+ rax = *(char* __ptr32 *)(ascb + ASCBRSME);
212
+ nframes = *(unsigned int*)(rax + RAXFMCT);
213
+
214
+ *rss = nframes * sysconf(_SC_PAGESIZE);
215
+ return 0;
216
+ }
217
+
218
+
219
+ int uv_uptime(double* uptime) {
220
+ struct utmpx u ;
221
+ struct utmpx *v;
222
+ time64_t t;
223
+
224
+ u.ut_type = BOOT_TIME;
225
+ v = getutxid(&u);
226
+ if (v == NULL)
227
+ return -1;
228
+ *uptime = difftime64(time64(&t), v->ut_tv.tv_sec);
229
+ return 0;
230
+ }
231
+
232
+
233
+ int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
234
+ uv_cpu_info_t* cpu_info;
235
+ int idx;
236
+ siv1v2 info;
237
+ data_area_ptr cvt = {0};
238
+ data_area_ptr csd = {0};
239
+ data_area_ptr rmctrct = {0};
240
+ data_area_ptr cvtopctp = {0};
241
+ int cpu_usage_avg;
242
+
243
+ cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR);
244
+
245
+ csd.assign = *((data_area_ptr_assign_type *) (cvt.deref + CSD_OFFSET));
246
+ cvtopctp.assign = *((data_area_ptr_assign_type *) (cvt.deref + CVTOPCTP_OFFSET));
247
+ rmctrct.assign = *((data_area_ptr_assign_type *) (cvtopctp.deref + RMCTRCT_OFFSET));
248
+
249
+ *count = *((int*) (csd.deref + CSD_NUMBER_ONLINE_CPUS));
250
+ cpu_usage_avg = *((unsigned short int*) (rmctrct.deref + RCTLACS_OFFSET));
251
+
252
+ *cpu_infos = uv__malloc(*count * sizeof(uv_cpu_info_t));
253
+ if (!*cpu_infos)
254
+ return UV_ENOMEM;
255
+
256
+ cpu_info = *cpu_infos;
257
+ idx = 0;
258
+ while (idx < *count) {
259
+ cpu_info->speed = *(int*)(info.siv1v2si22v1.si22v1cpucapability);
260
+ cpu_info->model = uv__malloc(ZOSCPU_MODEL_LENGTH + 1);
261
+ if (cpu_info->model == NULL) {
262
+ uv_free_cpu_info(*cpu_infos, idx);
263
+ return UV_ENOMEM;
264
+ }
265
+ __get_cpu_model(cpu_info->model, ZOSCPU_MODEL_LENGTH + 1);
266
+ cpu_info->cpu_times.user = cpu_usage_avg;
267
+ /* TODO: implement the following */
268
+ cpu_info->cpu_times.sys = 0;
269
+ cpu_info->cpu_times.idle = 0;
270
+ cpu_info->cpu_times.irq = 0;
271
+ cpu_info->cpu_times.nice = 0;
272
+ ++cpu_info;
273
+ ++idx;
274
+ }
275
+
276
+ return 0;
277
+ }
278
+
279
+
280
+ static int uv__interface_addresses_v6(uv_interface_address_t** addresses,
281
+ int* count) {
282
+ uv_interface_address_t* address;
283
+ int sockfd;
284
+ int maxsize;
285
+ __net_ifconf6header_t ifc;
286
+ __net_ifconf6entry_t* ifr;
287
+ __net_ifconf6entry_t* p;
288
+ unsigned int i;
289
+ int count_names;
290
+ unsigned char netmask[16] = {0};
291
+
292
+ *count = 0;
293
+ /* Assume maximum buffer size allowable */
294
+ maxsize = 16384;
295
+
296
+ if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP)))
297
+ return UV__ERR(errno);
298
+
299
+ ifc.__nif6h_buffer = uv__calloc(1, maxsize);
300
+
301
+ if (ifc.__nif6h_buffer == NULL) {
302
+ uv__close(sockfd);
303
+ return UV_ENOMEM;
304
+ }
305
+
306
+ ifc.__nif6h_version = 1;
307
+ ifc.__nif6h_buflen = maxsize;
308
+
309
+ if (ioctl(sockfd, SIOCGIFCONF6, &ifc) == -1) {
310
+ /* This will error on a system that does not support IPv6. However, we want
311
+ * to treat this as there being 0 interfaces so we can continue to get IPv4
312
+ * interfaces in uv_interface_addresses(). So return 0 instead of the error.
313
+ */
314
+ uv__free(ifc.__nif6h_buffer);
315
+ uv__close(sockfd);
316
+ errno = 0;
317
+ return 0;
318
+ }
319
+
320
+ ifr = (__net_ifconf6entry_t*)(ifc.__nif6h_buffer);
321
+ while ((char*)ifr < (char*)ifc.__nif6h_buffer + ifc.__nif6h_buflen) {
322
+ p = ifr;
323
+ ifr = (__net_ifconf6entry_t*)((char*)ifr + ifc.__nif6h_entrylen);
324
+
325
+ if (!(p->__nif6e_addr.sin6_family == AF_INET6))
326
+ continue;
327
+
328
+ if (!(p->__nif6e_flags & _NIF6E_FLAGS_ON_LINK_ACTIVE))
329
+ continue;
330
+
331
+ ++(*count);
332
+ }
333
+
334
+ if ((*count) == 0) {
335
+ uv__free(ifc.__nif6h_buffer);
336
+ uv__close(sockfd);
337
+ return 0;
338
+ }
339
+
340
+ /* Alloc the return interface structs */
341
+ *addresses = uv__calloc(1, *count * sizeof(uv_interface_address_t));
342
+ if (!(*addresses)) {
343
+ uv__free(ifc.__nif6h_buffer);
344
+ uv__close(sockfd);
345
+ return UV_ENOMEM;
346
+ }
347
+ address = *addresses;
348
+
349
+ count_names = 0;
350
+ ifr = (__net_ifconf6entry_t*)(ifc.__nif6h_buffer);
351
+ while ((char*)ifr < (char*)ifc.__nif6h_buffer + ifc.__nif6h_buflen) {
352
+ p = ifr;
353
+ ifr = (__net_ifconf6entry_t*)((char*)ifr + ifc.__nif6h_entrylen);
354
+
355
+ if (!(p->__nif6e_addr.sin6_family == AF_INET6))
356
+ continue;
357
+
358
+ if (!(p->__nif6e_flags & _NIF6E_FLAGS_ON_LINK_ACTIVE))
359
+ continue;
360
+
361
+ /* All conditions above must match count loop */
362
+
363
+ i = 0;
364
+ /* Ignore EBCDIC space (0x40) padding in name */
365
+ while (i < ARRAY_SIZE(p->__nif6e_name) &&
366
+ p->__nif6e_name[i] != 0x40 &&
367
+ p->__nif6e_name[i] != 0)
368
+ ++i;
369
+ address->name = uv__malloc(i + 1);
370
+ if (address->name == NULL) {
371
+ uv_free_interface_addresses(*addresses, count_names);
372
+ uv__free(ifc.__nif6h_buffer);
373
+ uv__close(sockfd);
374
+ return UV_ENOMEM;
375
+ }
376
+ memcpy(address->name, p->__nif6e_name, i);
377
+ address->name[i] = '\0';
378
+ __e2a_s(address->name);
379
+ count_names++;
380
+
381
+ address->address.address6 = *((struct sockaddr_in6*) &p->__nif6e_addr);
382
+
383
+ for (i = 0; i < (p->__nif6e_prefixlen / 8); i++)
384
+ netmask[i] = 0xFF;
385
+
386
+ if (p->__nif6e_prefixlen % 8)
387
+ netmask[i] = 0xFF << (8 - (p->__nif6e_prefixlen % 8));
388
+
389
+ address->netmask.netmask6.sin6_len = p->__nif6e_prefixlen;
390
+ memcpy(&(address->netmask.netmask6.sin6_addr), netmask, 16);
391
+ address->netmask.netmask6.sin6_family = AF_INET6;
392
+
393
+ address->is_internal = p->__nif6e_flags & _NIF6E_FLAGS_LOOPBACK ? 1 : 0;
394
+ address++;
395
+ }
396
+
397
+ uv__free(ifc.__nif6h_buffer);
398
+ uv__close(sockfd);
399
+ return 0;
400
+ }
401
+
402
+
403
+ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) {
404
+ uv_interface_address_t* address;
405
+ int sockfd;
406
+ int maxsize;
407
+ struct ifconf ifc;
408
+ struct ifreq flg;
409
+ struct ifreq* ifr;
410
+ struct ifreq* p;
411
+ uv_interface_address_t* addresses_v6;
412
+ int count_v6;
413
+ unsigned int i;
414
+ int rc;
415
+ int count_names;
416
+
417
+ *count = 0;
418
+ *addresses = NULL;
419
+
420
+ /* get the ipv6 addresses first */
421
+ if ((rc = uv__interface_addresses_v6(&addresses_v6, &count_v6)) != 0)
422
+ return rc;
423
+
424
+ /* now get the ipv4 addresses */
425
+
426
+ /* Assume maximum buffer size allowable */
427
+ maxsize = 16384;
428
+
429
+ sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
430
+ if (0 > sockfd) {
431
+ if (count_v6)
432
+ uv_free_interface_addresses(addresses_v6, count_v6);
433
+ return UV__ERR(errno);
434
+ }
435
+
436
+ ifc.ifc_req = uv__calloc(1, maxsize);
437
+
438
+ if (ifc.ifc_req == NULL) {
439
+ if (count_v6)
440
+ uv_free_interface_addresses(addresses_v6, count_v6);
441
+ uv__close(sockfd);
442
+ return UV_ENOMEM;
443
+ }
444
+
445
+ ifc.ifc_len = maxsize;
446
+
447
+ if (ioctl(sockfd, SIOCGIFCONF, &ifc) == -1) {
448
+ if (count_v6)
449
+ uv_free_interface_addresses(addresses_v6, count_v6);
450
+ uv__free(ifc.ifc_req);
451
+ uv__close(sockfd);
452
+ return UV__ERR(errno);
453
+ }
454
+
455
+ #define MAX(a,b) (((a)>(b))?(a):(b))
456
+ #define ADDR_SIZE(p) MAX((p).sa_len, sizeof(p))
457
+
458
+ /* Count all up and running ipv4/ipv6 addresses */
459
+ ifr = ifc.ifc_req;
460
+ while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) {
461
+ p = ifr;
462
+ ifr = (struct ifreq*)
463
+ ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr));
464
+
465
+ if (!(p->ifr_addr.sa_family == AF_INET6 ||
466
+ p->ifr_addr.sa_family == AF_INET))
467
+ continue;
468
+
469
+ memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name));
470
+ if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) {
471
+ if (count_v6)
472
+ uv_free_interface_addresses(addresses_v6, count_v6);
473
+ uv__free(ifc.ifc_req);
474
+ uv__close(sockfd);
475
+ return UV__ERR(errno);
476
+ }
477
+
478
+ if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING))
479
+ continue;
480
+
481
+ (*count)++;
482
+ }
483
+
484
+ if (*count == 0 && count_v6 == 0) {
485
+ uv__free(ifc.ifc_req);
486
+ uv__close(sockfd);
487
+ return 0;
488
+ }
489
+
490
+ /* Alloc the return interface structs */
491
+ *addresses = uv__calloc(1, (*count + count_v6) *
492
+ sizeof(uv_interface_address_t));
493
+
494
+ if (!(*addresses)) {
495
+ if (count_v6)
496
+ uv_free_interface_addresses(addresses_v6, count_v6);
497
+ uv__free(ifc.ifc_req);
498
+ uv__close(sockfd);
499
+ return UV_ENOMEM;
500
+ }
501
+ address = *addresses;
502
+
503
+ /* copy over the ipv6 addresses if any are found */
504
+ if (count_v6) {
505
+ memcpy(address, addresses_v6, count_v6 * sizeof(uv_interface_address_t));
506
+ address += count_v6;
507
+ *count += count_v6;
508
+ /* free ipv6 addresses, but keep address names */
509
+ uv__free(addresses_v6);
510
+ }
511
+
512
+ count_names = *count;
513
+ ifr = ifc.ifc_req;
514
+ while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) {
515
+ p = ifr;
516
+ ifr = (struct ifreq*)
517
+ ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr));
518
+
519
+ if (!(p->ifr_addr.sa_family == AF_INET6 ||
520
+ p->ifr_addr.sa_family == AF_INET))
521
+ continue;
522
+
523
+ memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name));
524
+ if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) {
525
+ uv_free_interface_addresses(*addresses, count_names);
526
+ uv__free(ifc.ifc_req);
527
+ uv__close(sockfd);
528
+ return UV_ENOSYS;
529
+ }
530
+
531
+ if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING))
532
+ continue;
533
+
534
+ /* All conditions above must match count loop */
535
+
536
+ i = 0;
537
+ /* Ignore EBCDIC space (0x40) padding in name */
538
+ while (i < ARRAY_SIZE(p->ifr_name) &&
539
+ p->ifr_name[i] != 0x40 &&
540
+ p->ifr_name[i] != 0)
541
+ ++i;
542
+ address->name = uv__malloc(i + 1);
543
+ if (address->name == NULL) {
544
+ uv_free_interface_addresses(*addresses, count_names);
545
+ uv__free(ifc.ifc_req);
546
+ uv__close(sockfd);
547
+ return UV_ENOMEM;
548
+ }
549
+ memcpy(address->name, p->ifr_name, i);
550
+ address->name[i] = '\0';
551
+ __e2a_s(address->name);
552
+ count_names++;
553
+
554
+ address->address.address4 = *((struct sockaddr_in*) &p->ifr_addr);
555
+
556
+ if (ioctl(sockfd, SIOCGIFNETMASK, p) == -1) {
557
+ uv_free_interface_addresses(*addresses, count_names);
558
+ uv__free(ifc.ifc_req);
559
+ uv__close(sockfd);
560
+ return UV__ERR(errno);
561
+ }
562
+
563
+ address->netmask.netmask4 = *((struct sockaddr_in*) &p->ifr_addr);
564
+ address->netmask.netmask4.sin_family = AF_INET;
565
+ address->is_internal = flg.ifr_flags & IFF_LOOPBACK ? 1 : 0;
566
+ address++;
567
+ }
568
+
569
+ #undef ADDR_SIZE
570
+ #undef MAX
571
+
572
+ uv__free(ifc.ifc_req);
573
+ uv__close(sockfd);
574
+ return 0;
575
+ }
576
+
577
+
578
+ void uv_free_interface_addresses(uv_interface_address_t* addresses,
579
+ int count) {
580
+ int i;
581
+ for (i = 0; i < count; ++i)
582
+ uv__free(addresses[i].name);
583
+ uv__free(addresses);
584
+ }
585
+
586
+
587
+ void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
588
+ struct epoll_event* events;
589
+ struct epoll_event dummy;
590
+ uintptr_t i;
591
+ uintptr_t nfds;
592
+
593
+ assert(loop->watchers != NULL);
594
+ assert(fd >= 0);
595
+
596
+ events = (struct epoll_event*) loop->watchers[loop->nwatchers];
597
+ nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1];
598
+ if (events != NULL)
599
+ /* Invalidate events with same file descriptor */
600
+ for (i = 0; i < nfds; i++)
601
+ if ((int) events[i].fd == fd)
602
+ events[i].fd = -1;
603
+
604
+ /* Remove the file descriptor from the epoll. */
605
+ if (loop->ep != NULL)
606
+ epoll_ctl(loop->ep, EPOLL_CTL_DEL, fd, &dummy);
607
+ }
608
+
609
+
610
+ int uv__io_check_fd(uv_loop_t* loop, int fd) {
611
+ struct pollfd p[1];
612
+ int rv;
613
+
614
+ p[0].fd = fd;
615
+ p[0].events = POLLIN;
616
+
617
+ do
618
+ rv = poll(p, 1, 0);
619
+ while (rv == -1 && errno == EINTR);
620
+
621
+ if (rv == -1)
622
+ abort();
623
+
624
+ if (p[0].revents & POLLNVAL)
625
+ return -1;
626
+
627
+ return 0;
628
+ }
629
+
630
+
631
+ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
632
+ uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT);
633
+ return 0;
634
+ }
635
+
636
+
637
+ static int os390_regfileint(uv_fs_event_t* handle, char* path) {
638
+ uv__os390_epoll* ep;
639
+ _RFIS reg_struct;
640
+ int rc;
641
+
642
+ ep = handle->loop->ep;
643
+ assert(ep->msg_queue != -1);
644
+
645
+ reg_struct.__rfis_cmd = _RFIS_REG;
646
+ reg_struct.__rfis_qid = ep->msg_queue;
647
+ reg_struct.__rfis_type = 1;
648
+ memcpy(reg_struct.__rfis_utok, &handle, sizeof(handle));
649
+
650
+ rc = __w_pioctl(path, _IOCC_REGFILEINT, sizeof(reg_struct), &reg_struct);
651
+ if (rc != 0)
652
+ return UV__ERR(errno);
653
+
654
+ memcpy(handle->rfis_rftok, reg_struct.__rfis_rftok,
655
+ sizeof(handle->rfis_rftok));
656
+
657
+ return 0;
658
+ }
659
+
660
+
661
+ int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb,
662
+ const char* filename, unsigned int flags) {
663
+ char* path;
664
+ int rc;
665
+
666
+ if (uv__is_active(handle))
667
+ return UV_EINVAL;
668
+
669
+ path = uv__strdup(filename);
670
+ if (path == NULL)
671
+ return UV_ENOMEM;
672
+
673
+ rc = os390_regfileint(handle, path);
674
+ if (rc != 0) {
675
+ uv__free(path);
676
+ return rc;
677
+ }
678
+
679
+ uv__handle_start(handle);
680
+ handle->path = path;
681
+ handle->cb = cb;
682
+
683
+ return 0;
684
+ }
685
+
686
+
687
+ int uv__fs_event_stop(uv_fs_event_t* handle) {
688
+ uv__os390_epoll* ep;
689
+ _RFIS reg_struct;
690
+ int rc;
691
+
692
+ if (!uv__is_active(handle))
693
+ return 0;
694
+
695
+ ep = handle->loop->ep;
696
+ assert(ep->msg_queue != -1);
697
+
698
+ reg_struct.__rfis_cmd = _RFIS_UNREG;
699
+ reg_struct.__rfis_qid = ep->msg_queue;
700
+ reg_struct.__rfis_type = 1;
701
+ memcpy(reg_struct.__rfis_rftok, handle->rfis_rftok,
702
+ sizeof(handle->rfis_rftok));
703
+
704
+ /*
705
+ * This call will take "/" as the path argument in case we
706
+ * don't care to supply the correct path. The system will simply
707
+ * ignore it.
708
+ */
709
+ rc = __w_pioctl("/", _IOCC_REGFILEINT, sizeof(reg_struct), &reg_struct);
710
+ if (rc != 0 && errno != EALREADY && errno != ENOENT)
711
+ abort();
712
+
713
+ if (handle->path != NULL) {
714
+ uv__free(handle->path);
715
+ handle->path = NULL;
716
+ }
717
+
718
+ if (rc != 0 && errno == EALREADY)
719
+ return -1;
720
+
721
+ uv__handle_stop(handle);
722
+
723
+ return 0;
724
+ }
725
+
726
+
727
+ int uv_fs_event_stop(uv_fs_event_t* handle) {
728
+ uv__fs_event_stop(handle);
729
+ return 0;
730
+ }
731
+
732
+
733
+ void uv__fs_event_close(uv_fs_event_t* handle) {
734
+ /*
735
+ * If we were unable to unregister file interest here, then it is most likely
736
+ * that there is a pending queued change notification. When this happens, we
737
+ * don't want to complete the close as it will free the underlying memory for
738
+ * the handle, causing a use-after-free problem when the event is processed.
739
+ * We defer the final cleanup until after the event is consumed in
740
+ * os390_message_queue_handler().
741
+ */
742
+ if (uv__fs_event_stop(handle) == 0)
743
+ uv__make_close_pending((uv_handle_t*) handle);
744
+ }
745
+
746
+
747
+ static int os390_message_queue_handler(uv__os390_epoll* ep) {
748
+ uv_fs_event_t* handle;
749
+ int msglen;
750
+ int events;
751
+ _RFIM msg;
752
+
753
+ if (ep->msg_queue == -1)
754
+ return 0;
755
+
756
+ msglen = msgrcv(ep->msg_queue, &msg, sizeof(msg), 0, IPC_NOWAIT);
757
+
758
+ if (msglen == -1 && errno == ENOMSG)
759
+ return 0;
760
+
761
+ if (msglen == -1)
762
+ abort();
763
+
764
+ events = 0;
765
+ if (msg.__rfim_event == _RFIM_ATTR || msg.__rfim_event == _RFIM_WRITE)
766
+ events = UV_CHANGE;
767
+ else if (msg.__rfim_event == _RFIM_RENAME || msg.__rfim_event == _RFIM_UNLINK)
768
+ events = UV_RENAME;
769
+ else if (msg.__rfim_event == 156)
770
+ /* TODO(gabylb): zos - this event should not happen, need to investigate.
771
+ *
772
+ * This event seems to occur when the watched file is [re]moved, or an
773
+ * editor (like vim) renames then creates the file on save (for vim, that's
774
+ * when backupcopy=no|auto).
775
+ */
776
+ events = UV_RENAME;
777
+ else
778
+ /* Some event that we are not interested in. */
779
+ return 0;
780
+
781
+ /* `__rfim_utok` is treated as text when it should be treated as binary while
782
+ * running in ASCII mode, resulting in an unwanted autoconversion.
783
+ */
784
+ __a2e_l(msg.__rfim_utok, sizeof(msg.__rfim_utok));
785
+ handle = *(uv_fs_event_t**)(msg.__rfim_utok);
786
+ assert(handle != NULL);
787
+
788
+ assert((handle->flags & UV_HANDLE_CLOSED) == 0);
789
+ if (uv__is_closing(handle)) {
790
+ uv__handle_stop(handle);
791
+ uv__make_close_pending((uv_handle_t*) handle);
792
+ return 0;
793
+ } else if (handle->path == NULL) {
794
+ /* _RFIS_UNREG returned EALREADY. */
795
+ uv__handle_stop(handle);
796
+ return 0;
797
+ }
798
+
799
+ /* The file is implicitly unregistered when the change notification is
800
+ * sent, only one notification is sent per registration. So we need to
801
+ * re-register interest in a file after each change notification we
802
+ * receive.
803
+ */
804
+ assert(handle->path != NULL);
805
+ os390_regfileint(handle, handle->path);
806
+ handle->cb(handle, uv__basename_r(handle->path), events, 0);
807
+ return 1;
808
+ }
809
+
810
+
811
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
812
+ static const int max_safe_timeout = 1789569;
813
+ uv__loop_internal_fields_t* lfields;
814
+ struct epoll_event events[1024];
815
+ struct epoll_event* pe;
816
+ struct epoll_event e;
817
+ uv__os390_epoll* ep;
818
+ int have_signals;
819
+ int real_timeout;
820
+ struct uv__queue* q;
821
+ uv__io_t* w;
822
+ uint64_t base;
823
+ int count;
824
+ int nfds;
825
+ int fd;
826
+ int op;
827
+ int i;
828
+ int user_timeout;
829
+ int reset_timeout;
830
+
831
+ if (loop->nfds == 0) {
832
+ assert(uv__queue_empty(&loop->watcher_queue));
833
+ return;
834
+ }
835
+
836
+ lfields = uv__get_internal_fields(loop);
837
+
838
+ while (!uv__queue_empty(&loop->watcher_queue)) {
839
+ uv_stream_t* stream;
840
+
841
+ q = uv__queue_head(&loop->watcher_queue);
842
+ uv__queue_remove(q);
843
+ uv__queue_init(q);
844
+ w = uv__queue_data(q, uv__io_t, watcher_queue);
845
+
846
+ assert(w->pevents != 0);
847
+ assert(w->fd >= 0);
848
+
849
+ stream= container_of(w, uv_stream_t, io_watcher);
850
+
851
+ assert(w->fd < (int) loop->nwatchers);
852
+
853
+ e.events = w->pevents;
854
+ e.fd = w->fd;
855
+
856
+ if (w->events == 0)
857
+ op = EPOLL_CTL_ADD;
858
+ else
859
+ op = EPOLL_CTL_MOD;
860
+
861
+ /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching
862
+ * events, skip the syscall and squelch the events after epoll_wait().
863
+ */
864
+ if (epoll_ctl(loop->ep, op, w->fd, &e)) {
865
+ if (errno != EEXIST)
866
+ abort();
867
+
868
+ assert(op == EPOLL_CTL_ADD);
869
+
870
+ /* We've reactivated a file descriptor that's been watched before. */
871
+ if (epoll_ctl(loop->ep, EPOLL_CTL_MOD, w->fd, &e))
872
+ abort();
873
+ }
874
+
875
+ w->events = w->pevents;
876
+ }
877
+
878
+ assert(timeout >= -1);
879
+ base = loop->time;
880
+ count = 48; /* Benchmarks suggest this gives the best throughput. */
881
+ real_timeout = timeout;
882
+ int nevents = 0;
883
+ have_signals = 0;
884
+
885
+ if (lfields->flags & UV_METRICS_IDLE_TIME) {
886
+ reset_timeout = 1;
887
+ user_timeout = timeout;
888
+ timeout = 0;
889
+ } else {
890
+ reset_timeout = 0;
891
+ }
892
+
893
+ nfds = 0;
894
+ for (;;) {
895
+ /* Only need to set the provider_entry_time if timeout != 0. The function
896
+ * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME.
897
+ */
898
+ if (timeout != 0)
899
+ uv__metrics_set_provider_entry_time(loop);
900
+
901
+ if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
902
+ timeout = max_safe_timeout;
903
+
904
+ /* Store the current timeout in a location that's globally accessible so
905
+ * other locations like uv__work_done() can determine whether the queue
906
+ * of events in the callback were waiting when poll was called.
907
+ */
908
+ lfields->current_timeout = timeout;
909
+
910
+ nfds = epoll_wait(loop->ep, events,
911
+ ARRAY_SIZE(events), timeout);
912
+
913
+ /* Update loop->time unconditionally. It's tempting to skip the update when
914
+ * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the
915
+ * operating system didn't reschedule our process while in the syscall.
916
+ */
917
+ base = loop->time;
918
+ SAVE_ERRNO(uv__update_time(loop));
919
+ if (nfds == 0) {
920
+ assert(timeout != -1);
921
+
922
+ if (reset_timeout != 0) {
923
+ timeout = user_timeout;
924
+ reset_timeout = 0;
925
+ }
926
+
927
+ if (timeout == -1)
928
+ continue;
929
+
930
+ if (timeout == 0)
931
+ return;
932
+
933
+ /* We may have been inside the system call for longer than |timeout|
934
+ * milliseconds so we need to update the timestamp to avoid drift.
935
+ */
936
+ goto update_timeout;
937
+ }
938
+
939
+ if (nfds == -1) {
940
+
941
+ if (errno != EINTR)
942
+ abort();
943
+
944
+ if (reset_timeout != 0) {
945
+ timeout = user_timeout;
946
+ reset_timeout = 0;
947
+ }
948
+
949
+ if (timeout == -1)
950
+ continue;
951
+
952
+ if (timeout == 0)
953
+ return;
954
+
955
+ /* Interrupted by a signal. Update timeout and poll again. */
956
+ goto update_timeout;
957
+ }
958
+
959
+
960
+ assert(loop->watchers != NULL);
961
+ loop->watchers[loop->nwatchers] = (void*) events;
962
+ loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds;
963
+ for (i = 0; i < nfds; i++) {
964
+ pe = events + i;
965
+ fd = pe->fd;
966
+
967
+ /* Skip invalidated events, see uv__platform_invalidate_fd */
968
+ if (fd == -1)
969
+ continue;
970
+
971
+ ep = loop->ep;
972
+ if (pe->is_msg) {
973
+ os390_message_queue_handler(ep);
974
+ nevents++;
975
+ continue;
976
+ }
977
+
978
+ assert(fd >= 0);
979
+ assert((unsigned) fd < loop->nwatchers);
980
+
981
+ w = loop->watchers[fd];
982
+
983
+ if (w == NULL) {
984
+ /* File descriptor that we've stopped watching, disarm it.
985
+ *
986
+ * Ignore all errors because we may be racing with another thread
987
+ * when the file descriptor is closed.
988
+ */
989
+ epoll_ctl(loop->ep, EPOLL_CTL_DEL, fd, pe);
990
+ continue;
991
+ }
992
+
993
+ /* Give users only events they're interested in. Prevents spurious
994
+ * callbacks when previous callback invocation in this loop has stopped
995
+ * the current watcher. Also, filters out events that users has not
996
+ * requested us to watch.
997
+ */
998
+ pe->events &= w->pevents | POLLERR | POLLHUP;
999
+
1000
+ if (pe->events == POLLERR || pe->events == POLLHUP)
1001
+ pe->events |= w->pevents & (POLLIN | POLLOUT);
1002
+
1003
+ if (pe->events != 0) {
1004
+ /* Run signal watchers last. This also affects child process watchers
1005
+ * because those are implemented in terms of signal watchers.
1006
+ */
1007
+ if (w == &loop->signal_io_watcher) {
1008
+ have_signals = 1;
1009
+ } else {
1010
+ uv__metrics_update_idle_time(loop);
1011
+ w->cb(loop, w, pe->events);
1012
+ }
1013
+ nevents++;
1014
+ }
1015
+ }
1016
+
1017
+ uv__metrics_inc_events(loop, nevents);
1018
+ if (reset_timeout != 0) {
1019
+ timeout = user_timeout;
1020
+ reset_timeout = 0;
1021
+ uv__metrics_inc_events_waiting(loop, nevents);
1022
+ }
1023
+
1024
+ if (have_signals != 0) {
1025
+ uv__metrics_update_idle_time(loop);
1026
+ loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN);
1027
+ }
1028
+
1029
+ loop->watchers[loop->nwatchers] = NULL;
1030
+ loop->watchers[loop->nwatchers + 1] = NULL;
1031
+
1032
+ if (have_signals != 0)
1033
+ return; /* Event loop should cycle now so don't poll again. */
1034
+
1035
+ if (nevents != 0) {
1036
+ if (nfds == ARRAY_SIZE(events) && --count != 0) {
1037
+ /* Poll for more events but don't block this time. */
1038
+ timeout = 0;
1039
+ continue;
1040
+ }
1041
+ return;
1042
+ }
1043
+
1044
+ if (timeout == 0)
1045
+ return;
1046
+
1047
+ if (timeout == -1)
1048
+ continue;
1049
+
1050
+ update_timeout:
1051
+ assert(timeout > 0);
1052
+
1053
+ real_timeout -= (loop->time - base);
1054
+ if (real_timeout <= 0)
1055
+ return;
1056
+
1057
+ timeout = real_timeout;
1058
+ }
1059
+ }
1060
+
1061
+
1062
+ int uv__io_fork(uv_loop_t* loop) {
1063
+ /*
1064
+ Nullify the msg queue but don't close it because
1065
+ it is still being used by the parent.
1066
+ */
1067
+ loop->ep = NULL;
1068
+
1069
+ return uv__platform_loop_init(loop);
1070
+ }