passenger 6.2.0 → 6.2.1

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 (650) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +33 -1
  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 +37 -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 +2 -1
  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 +1 -2
  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 +8 -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 +1 -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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  283. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +1 -1
  284. data/src/cxx_supportlib/ServerKit/HttpRequest.h +1 -1
  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/StaticString.h +1 -1
  290. data/src/cxx_supportlib/StrIntTools/DateParsing.h +1 -1
  291. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +1 -1
  292. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +1 -1
  293. data/src/cxx_supportlib/StrIntTools/StrIntUtilsNoStrictAliasing.cpp +1 -1
  294. data/src/cxx_supportlib/StrIntTools/StringScanning.h +1 -1
  295. data/src/cxx_supportlib/StrIntTools/Template.h +1 -1
  296. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +1 -1
  297. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +1 -1
  298. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +1 -1
  299. data/src/cxx_supportlib/SystemTools/SystemTime.cpp +1 -1
  300. data/src/cxx_supportlib/SystemTools/SystemTime.h +1 -1
  301. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +1 -1
  302. data/src/cxx_supportlib/SystemTools/UserDatabase.h +1 -1
  303. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +1 -1
  304. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +1 -1
  305. data/src/cxx_supportlib/Utils/BlockingQueue.h +1 -1
  306. data/src/cxx_supportlib/Utils/CachedFileStat.cpp +1 -1
  307. data/src/cxx_supportlib/Utils/CachedFileStat.h +1 -1
  308. data/src/cxx_supportlib/Utils/CachedFileStat.hpp +1 -1
  309. data/src/cxx_supportlib/Utils/ClassUtils.h +1 -1
  310. data/src/cxx_supportlib/Utils/Curl.h +1 -1
  311. data/src/cxx_supportlib/Utils/FastStringStream.h +1 -1
  312. data/src/cxx_supportlib/Utils/FileChangeChecker.h +1 -1
  313. data/src/cxx_supportlib/Utils/HttpConstants.h +1 -1
  314. data/src/cxx_supportlib/Utils/IniFile.h +1 -1
  315. data/src/cxx_supportlib/Utils/MessagePassing.h +1 -1
  316. data/src/cxx_supportlib/Utils/OptionParsing.h +1 -1
  317. data/src/cxx_supportlib/Utils/ReleaseableScopedPointer.h +1 -1
  318. data/src/cxx_supportlib/Utils/ScopeGuard.h +1 -1
  319. data/src/cxx_supportlib/Utils/SpeedMeter.h +1 -1
  320. data/src/cxx_supportlib/Utils/Timer.h +1 -1
  321. data/src/cxx_supportlib/Utils/VariantMap.h +1 -1
  322. data/src/cxx_supportlib/Utils.cpp +1 -1
  323. data/src/cxx_supportlib/Utils.h +1 -1
  324. data/src/cxx_supportlib/WatchdogLauncher.cpp +1 -1
  325. data/src/cxx_supportlib/WatchdogLauncher.h +1 -1
  326. data/src/cxx_supportlib/WrapperRegistry/CBindings.cpp +1 -1
  327. data/src/cxx_supportlib/WrapperRegistry/CBindings.h +1 -1
  328. data/src/cxx_supportlib/WrapperRegistry/Entry.h +1 -1
  329. data/src/cxx_supportlib/WrapperRegistry/Registry.h +1 -1
  330. data/src/cxx_supportlib/oxt/backtrace.hpp +1 -1
  331. data/src/cxx_supportlib/oxt/detail/backtrace_disabled.hpp +1 -1
  332. data/src/cxx_supportlib/oxt/detail/backtrace_enabled.hpp +1 -1
  333. data/src/cxx_supportlib/oxt/detail/context.hpp +1 -1
  334. data/src/cxx_supportlib/oxt/detail/tracable_exception_disabled.hpp +1 -1
  335. data/src/cxx_supportlib/oxt/detail/tracable_exception_enabled.hpp +1 -1
  336. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +1 -1
  337. data/src/cxx_supportlib/oxt/implementation.cpp +1 -1
  338. data/src/cxx_supportlib/oxt/initialize.hpp +1 -1
  339. data/src/cxx_supportlib/oxt/macros.hpp +1 -1
  340. data/src/cxx_supportlib/oxt/spin_lock.hpp +1 -1
  341. data/src/cxx_supportlib/oxt/system_calls.cpp +1 -1
  342. data/src/cxx_supportlib/oxt/system_calls.hpp +1 -1
  343. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  344. data/src/cxx_supportlib/oxt/tracable_exception.hpp +1 -1
  345. data/src/cxx_supportlib/vendor-copy/adhoc_lve.h +1 -1
  346. data/src/cxx_supportlib/vendor-copy/libuv/AUTHORS +353 -3
  347. data/src/cxx_supportlib/vendor-copy/libuv/ChangeLog +3981 -2
  348. data/src/cxx_supportlib/vendor-copy/libuv/LICENSE +1 -28
  349. data/src/cxx_supportlib/vendor-copy/libuv/LICENSE-docs +396 -0
  350. data/src/cxx_supportlib/vendor-copy/libuv/LICENSE-extra +36 -0
  351. data/src/cxx_supportlib/vendor-copy/libuv/Makefile.am +275 -58
  352. data/src/cxx_supportlib/vendor-copy/libuv/Makefile.in +4380 -2125
  353. data/src/cxx_supportlib/vendor-copy/libuv/aclocal.m4 +425 -221
  354. data/src/cxx_supportlib/vendor-copy/libuv/ar-lib +30 -10
  355. data/src/cxx_supportlib/vendor-copy/libuv/compile +31 -14
  356. data/src/cxx_supportlib/vendor-copy/libuv/config.guess +1084 -690
  357. data/src/cxx_supportlib/vendor-copy/libuv/config.sub +1844 -1297
  358. data/src/cxx_supportlib/vendor-copy/libuv/configure +6935 -3664
  359. data/src/cxx_supportlib/vendor-copy/libuv/configure.ac +43 -19
  360. data/src/cxx_supportlib/vendor-copy/libuv/depcomp +12 -11
  361. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-darwin.h → uv/darwin.h} +3 -3
  362. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-errno.h → uv/errno.h} +119 -60
  363. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-linux.h → uv/linux.h} +1 -1
  364. data/src/cxx_supportlib/vendor-copy/libuv/include/uv/os390.h +33 -0
  365. data/src/cxx_supportlib/vendor-copy/libuv/include/uv/posix.h +31 -0
  366. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-threadpool.h → uv/threadpool.h} +1 -1
  367. data/src/cxx_supportlib/vendor-copy/libuv/include/{tree.h → uv/tree.h} +3 -250
  368. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-unix.h → uv/unix.h} +186 -60
  369. data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-version.h → uv/version.h} +3 -3
  370. data/src/cxx_supportlib/vendor-copy/libuv/include/uv/win.h +703 -0
  371. data/src/cxx_supportlib/vendor-copy/libuv/include/uv.h +528 -40
  372. data/src/cxx_supportlib/vendor-copy/libuv/install-sh +110 -70
  373. data/src/cxx_supportlib/vendor-copy/libuv/libuv-static.pc.in +12 -0
  374. data/src/cxx_supportlib/vendor-copy/libuv/libuv.pc.in +4 -2
  375. data/src/cxx_supportlib/vendor-copy/libuv/ltmain.sh +995 -619
  376. data/src/cxx_supportlib/vendor-copy/libuv/m4/ax_pthread.m4 +485 -0
  377. data/src/cxx_supportlib/vendor-copy/libuv/m4/libtool.m4 +438 -289
  378. data/src/cxx_supportlib/vendor-copy/libuv/m4/libuv-check-flags.m4 +21 -4
  379. data/src/cxx_supportlib/vendor-copy/libuv/m4/libuv-check-versions.m4 +7 -0
  380. data/src/cxx_supportlib/vendor-copy/libuv/m4/ltoptions.m4 +69 -39
  381. data/src/cxx_supportlib/vendor-copy/libuv/m4/ltsugar.m4 +1 -1
  382. data/src/cxx_supportlib/vendor-copy/libuv/m4/ltversion.m4 +7 -6
  383. data/src/cxx_supportlib/vendor-copy/libuv/m4/lt~obsolete.m4 +2 -2
  384. data/src/cxx_supportlib/vendor-copy/libuv/missing +55 -34
  385. data/src/cxx_supportlib/vendor-copy/libuv/src/fs-poll.c +52 -20
  386. data/src/cxx_supportlib/vendor-copy/libuv/src/idna.c +560 -0
  387. data/src/cxx_supportlib/vendor-copy/libuv/src/idna.h +31 -0
  388. data/src/cxx_supportlib/vendor-copy/libuv/src/inet.c +5 -16
  389. data/src/cxx_supportlib/vendor-copy/libuv/src/queue.h +68 -86
  390. data/src/cxx_supportlib/vendor-copy/libuv/src/random.c +123 -0
  391. data/src/cxx_supportlib/vendor-copy/libuv/src/strscpy.c +38 -0
  392. data/src/cxx_supportlib/vendor-copy/libuv/src/strscpy.h +39 -0
  393. data/src/cxx_supportlib/vendor-copy/libuv/src/strtok.c +52 -0
  394. data/src/cxx_supportlib/vendor-copy/libuv/src/strtok.h +27 -0
  395. data/src/cxx_supportlib/vendor-copy/libuv/src/thread-common.c +175 -0
  396. data/src/cxx_supportlib/vendor-copy/libuv/src/threadpool.c +172 -57
  397. data/src/cxx_supportlib/vendor-copy/libuv/src/{unix/timer.c → timer.c} +57 -29
  398. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/aix-common.c +89 -0
  399. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/aix.c +418 -256
  400. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/async.c +168 -129
  401. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/bsd-ifaddrs.c +163 -0
  402. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/bsd-proctitle.c +99 -0
  403. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/core.c +1312 -378
  404. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/cygwin.c +93 -0
  405. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin-proctitle.c +18 -32
  406. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin-stub.h +97 -0
  407. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin-syscalls.h +17 -0
  408. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin.c +41 -139
  409. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/dl.c +1 -1
  410. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/freebsd.c +75 -235
  411. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fs.c +1308 -299
  412. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fsevents.c +150 -148
  413. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/getaddrinfo.c +58 -8
  414. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/getnameinfo.c +3 -2
  415. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/haiku.c +172 -0
  416. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/hurd.c +172 -0
  417. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/ibmi.c +542 -0
  418. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/internal.h +297 -106
  419. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/kqueue.c +325 -94
  420. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux.c +2708 -0
  421. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop-watcher.c +11 -11
  422. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop.c +105 -24
  423. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/netbsd.c +51 -157
  424. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/no-fsevents.c +42 -0
  425. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/no-proctitle.c +45 -0
  426. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/openbsd.c +42 -183
  427. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390-proctitle.c +136 -0
  428. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390-syscalls.c +536 -0
  429. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390-syscalls.h +75 -0
  430. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/os390.c +1070 -0
  431. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pipe.c +324 -55
  432. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/poll.c +58 -11
  433. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/posix-hrtime.c +36 -0
  434. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/posix-poll.c +385 -0
  435. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/process.c +795 -248
  436. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/procfs-exepath.c +45 -0
  437. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/proctitle.c +77 -22
  438. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/qnx.c +142 -0
  439. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-devurandom.c +93 -0
  440. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-getentropy.c +57 -0
  441. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-getrandom.c +86 -0
  442. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/random-sysctl-linux.c +99 -0
  443. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/signal.c +147 -39
  444. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/stream.c +426 -474
  445. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sunos.c +240 -98
  446. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sysinfo-loadavg.c +36 -0
  447. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sysinfo-memory.c +42 -0
  448. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tcp.c +402 -91
  449. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/thread.c +497 -145
  450. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tty.c +269 -45
  451. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/udp.c +695 -165
  452. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.c +463 -61
  453. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.h +248 -44
  454. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-data-getter-setters.c +119 -0
  455. data/src/cxx_supportlib/vendor-copy/libuv/tsansupp.txt +2 -0
  456. data/src/cxx_supportlib/vendor-modified/libev/Changes +109 -0
  457. data/src/cxx_supportlib/vendor-modified/libev/Makefile.am +2 -1
  458. data/src/cxx_supportlib/vendor-modified/libev/Makefile.in +47 -33
  459. data/src/cxx_supportlib/vendor-modified/libev/README +2 -1
  460. data/src/cxx_supportlib/vendor-modified/libev/aclocal.m4 +1653 -1224
  461. data/src/cxx_supportlib/vendor-modified/libev/config.guess +376 -316
  462. data/src/cxx_supportlib/vendor-modified/libev/config.h.in +13 -2
  463. data/src/cxx_supportlib/vendor-modified/libev/config.sub +156 -154
  464. data/src/cxx_supportlib/vendor-modified/libev/configure +1431 -940
  465. data/src/cxx_supportlib/vendor-modified/libev/configure.ac +3 -3
  466. data/src/cxx_supportlib/vendor-modified/libev/depcomp +5 -5
  467. data/src/cxx_supportlib/vendor-modified/libev/ev++.h +109 -107
  468. data/src/cxx_supportlib/vendor-modified/libev/ev.c +807 -319
  469. data/src/cxx_supportlib/vendor-modified/libev/ev.h +111 -105
  470. data/src/cxx_supportlib/vendor-modified/libev/ev_epoll.c +42 -29
  471. data/src/cxx_supportlib/vendor-modified/libev/ev_iouring.c +694 -0
  472. data/src/cxx_supportlib/vendor-modified/libev/ev_kqueue.c +15 -9
  473. data/src/cxx_supportlib/vendor-modified/libev/ev_linuxaio.c +620 -0
  474. data/src/cxx_supportlib/vendor-modified/libev/ev_poll.c +19 -14
  475. data/src/cxx_supportlib/vendor-modified/libev/ev_port.c +8 -5
  476. data/src/cxx_supportlib/vendor-modified/libev/ev_select.c +6 -6
  477. data/src/cxx_supportlib/vendor-modified/libev/ev_vars.h +48 -3
  478. data/src/cxx_supportlib/vendor-modified/libev/ev_win32.c +2 -2
  479. data/src/cxx_supportlib/vendor-modified/libev/ev_wrap.h +72 -0
  480. data/src/cxx_supportlib/vendor-modified/libev/install-sh +23 -13
  481. data/src/cxx_supportlib/vendor-modified/libev/libev.m4 +6 -1
  482. data/src/cxx_supportlib/vendor-modified/libev/ltmain.sh +3581 -1993
  483. data/src/cxx_supportlib/vendor-modified/libev/missing +8 -8
  484. data/src/cxx_supportlib/vendor-modified/libev/mkinstalldirs +3 -3
  485. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +1 -1
  486. data/src/helper-scripts/backtrace-sanitizer.rb +1 -1
  487. data/src/helper-scripts/crash-watch.rb +1 -1
  488. data/src/helper-scripts/download_binaries/extconf.rb +1 -1
  489. data/src/helper-scripts/meteor-loader.rb +1 -1
  490. data/src/helper-scripts/node-loader.js +1 -1
  491. data/src/helper-scripts/prespawn +1 -1
  492. data/src/helper-scripts/rack-loader.rb +1 -1
  493. data/src/helper-scripts/rack-preloader.rb +1 -1
  494. data/src/helper-scripts/wsgi-loader.py +1 -1
  495. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +1 -1
  496. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder +1 -1
  497. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +1 -1
  498. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +1 -1
  499. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +1 -1
  500. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +1 -1
  501. data/src/nginx_module/Configuration.c +1 -1
  502. data/src/nginx_module/Configuration.h +1 -1
  503. data/src/nginx_module/ContentHandler.c +1 -1
  504. data/src/nginx_module/ContentHandler.h +1 -1
  505. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +1 -1
  506. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +1 -1
  507. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +1 -1
  508. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder +1 -1
  509. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +1 -1
  510. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +1 -1
  511. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +1 -1
  512. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder +1 -1
  513. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +1 -1
  514. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder +1 -1
  515. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +1 -1
  516. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +1 -1
  517. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +1 -1
  518. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +1 -1
  519. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +1 -1
  520. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +1 -1
  521. data/src/nginx_module/StaticContentHandler.c +1 -1
  522. data/src/nginx_module/StaticContentHandler.h +1 -1
  523. data/src/nginx_module/ngx_http_passenger_module.c +1 -1
  524. data/src/nginx_module/ngx_http_passenger_module.h +1 -1
  525. data/src/nodejs_supportlib/phusion_passenger/line_reader.js +1 -1
  526. data/src/ruby_native_extension/extconf.rb +1 -1
  527. data/src/ruby_native_extension/passenger_native_support.c +1 -1
  528. data/src/ruby_supportlib/phusion_passenger/abstract_installer.rb +1 -1
  529. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +1 -1
  530. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +1 -1
  531. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +2 -12
  532. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +1 -1
  533. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -1
  534. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +1 -1
  535. data/src/ruby_supportlib/phusion_passenger/common_library.rb +8 -10
  536. data/src/ruby_supportlib/phusion_passenger/config/about_command.rb +1 -1
  537. data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +1 -1
  538. data/src/ruby_supportlib/phusion_passenger/config/api_call_command.rb +1 -1
  539. data/src/ruby_supportlib/phusion_passenger/config/build_native_support_command.rb +1 -1
  540. data/src/ruby_supportlib/phusion_passenger/config/command.rb +1 -1
  541. data/src/ruby_supportlib/phusion_passenger/config/compile_agent_command.rb +1 -1
  542. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +1 -1
  543. data/src/ruby_supportlib/phusion_passenger/config/detach_process_command.rb +1 -1
  544. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +1 -1
  545. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +1 -1
  546. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +1 -1
  547. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +1 -1
  548. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
  549. data/src/ruby_supportlib/phusion_passenger/config/list_instances_command.rb +1 -1
  550. data/src/ruby_supportlib/phusion_passenger/config/main.rb +1 -1
  551. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +3 -2
  552. data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +6 -1
  553. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +1 -1
  554. data/src/ruby_supportlib/phusion_passenger/config/system_metrics_command.rb +1 -1
  555. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +1 -1
  556. data/src/ruby_supportlib/phusion_passenger/config/utils.rb +1 -1
  557. data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +1 -1
  558. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +1 -1
  559. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -1
  560. data/src/ruby_supportlib/phusion_passenger/debug_logging.rb +1 -1
  561. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -1
  562. data/src/ruby_supportlib/phusion_passenger/message_channel.rb +1 -1
  563. data/src/ruby_supportlib/phusion_passenger/message_client.rb +1 -1
  564. data/src/ruby_supportlib/phusion_passenger/native_support.rb +1 -1
  565. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +1 -1
  566. data/src/ruby_supportlib/phusion_passenger/packaging.rb +4 -3
  567. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +1 -1
  568. data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +1 -1
  569. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +1 -1
  570. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +195 -11
  571. data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +1 -1
  572. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +1 -1
  573. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +1 -1
  574. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +1 -1
  575. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +1 -1
  576. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +1 -1
  577. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
  578. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +1 -1
  579. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +1 -1
  580. data/src/ruby_supportlib/phusion_passenger/platform_info/zlib.rb +1 -1
  581. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +1 -1
  582. data/src/ruby_supportlib/phusion_passenger/plugin.rb +1 -1
  583. data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +1 -1
  584. data/src/ruby_supportlib/phusion_passenger/public_api.rb +1 -1
  585. data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +1 -1
  586. data/src/ruby_supportlib/phusion_passenger/rack/out_of_band_gc.rb +1 -1
  587. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +1 -1
  588. data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +1 -1
  589. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -7
  590. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +1 -1
  591. data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +1 -1
  592. data/src/ruby_supportlib/phusion_passenger/ruby_core_io_enhancements.rb +1 -1
  593. data/src/ruby_supportlib/phusion_passenger/simple_benchmarking.rb +1 -1
  594. data/src/ruby_supportlib/phusion_passenger/standalone/app_finder.rb +1 -1
  595. data/src/ruby_supportlib/phusion_passenger/standalone/command.rb +1 -1
  596. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +1 -1
  597. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +1 -1
  598. data/src/ruby_supportlib/phusion_passenger/standalone/control_utils.rb +1 -1
  599. data/src/ruby_supportlib/phusion_passenger/standalone/main.rb +1 -1
  600. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +2 -2
  601. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +4 -8
  602. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -1
  603. data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +1 -1
  604. data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +1 -1
  605. data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +1 -1
  606. data/src/ruby_supportlib/phusion_passenger/utils/ansi_colors.rb +1 -1
  607. data/src/ruby_supportlib/phusion_passenger/utils/download.rb +1 -1
  608. data/src/ruby_supportlib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  609. data/src/ruby_supportlib/phusion_passenger/utils/hosts_file_parser.rb +1 -1
  610. data/src/ruby_supportlib/phusion_passenger/utils/lock.rb +1 -1
  611. data/src/ruby_supportlib/phusion_passenger/utils/native_support_utils.rb +1 -1
  612. data/src/ruby_supportlib/phusion_passenger/utils/progress_bar.rb +1 -1
  613. data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +1 -1
  614. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
  615. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +3 -13
  616. data/src/ruby_supportlib/phusion_passenger/utils.rb +1 -1
  617. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -1
  618. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/base.rb +1 -1
  619. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
  620. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +1 -1
  621. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/utils.rb +1 -1
  622. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/version.rb +1 -1
  623. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/lock_file.rb +8 -6
  624. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/spawn.rb +4 -3
  625. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/version.rb +6 -4
  626. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +395 -579
  627. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  628. data/src/schema_printer/SchemaPrinterMain.cpp +1 -1
  629. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +1 -1
  630. metadata +69 -32
  631. data/doc/DeveloperQuickstart.md +0 -70
  632. data/src/README.md +0 -7
  633. data/src/cxx_supportlib/vendor-copy/libuv/README.md +0 -245
  634. data/src/cxx_supportlib/vendor-copy/libuv/checksparse.sh +0 -234
  635. data/src/cxx_supportlib/vendor-copy/libuv/common.gypi +0 -210
  636. data/src/cxx_supportlib/vendor-copy/libuv/gyp_uv.py +0 -93
  637. data/src/cxx_supportlib/vendor-copy/libuv/include/android-ifaddrs.h +0 -54
  638. data/src/cxx_supportlib/vendor-copy/libuv/include/pthread-fixes.h +0 -72
  639. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/android-ifaddrs.c +0 -703
  640. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/atomic-ops.h +0 -77
  641. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-core.c +0 -899
  642. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-inotify.c +0 -285
  643. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.c +0 -471
  644. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.h +0 -158
  645. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pthread-fixes.c +0 -104
  646. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/spinlock.h +0 -53
  647. data/src/cxx_supportlib/vendor-copy/libuv/uv.gyp +0 -508
  648. /data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-aix.h → uv/aix.h} +0 -0
  649. /data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-bsd.h → uv/bsd.h} +0 -0
  650. /data/src/cxx_supportlib/vendor-copy/libuv/include/{uv-sunos.h → uv/sunos.h} +0 -0
@@ -22,10 +22,11 @@
22
22
  #include "uv.h"
23
23
  #include "uv-common.h"
24
24
 
25
- #include <stdio.h>
26
25
  #include <assert.h>
26
+ #include <errno.h>
27
27
  #include <stdarg.h>
28
28
  #include <stddef.h> /* NULL */
29
+ #include <stdio.h>
29
30
  #include <stdlib.h> /* malloc */
30
31
  #include <string.h> /* memset */
31
32
 
@@ -33,6 +34,7 @@
33
34
  # include <malloc.h> /* malloc */
34
35
  #else
35
36
  # include <net/if.h> /* if_nametoindex */
37
+ # include <sys/un.h> /* AF_UNIX, sockaddr_un */
36
38
  #endif
37
39
 
38
40
 
@@ -71,11 +73,20 @@ char* uv__strndup(const char* s, size_t n) {
71
73
  }
72
74
 
73
75
  void* uv__malloc(size_t size) {
74
- return uv__allocator.local_malloc(size);
76
+ if (size > 0)
77
+ return uv__allocator.local_malloc(size);
78
+ return NULL;
75
79
  }
76
80
 
77
81
  void uv__free(void* ptr) {
82
+ int saved_errno;
83
+
84
+ /* Libuv expects that free() does not clobber errno. The system allocator
85
+ * honors that assumption but custom allocators may not be so careful.
86
+ */
87
+ saved_errno = errno;
78
88
  uv__allocator.local_free(ptr);
89
+ errno = saved_errno;
79
90
  }
80
91
 
81
92
  void* uv__calloc(size_t count, size_t size) {
@@ -83,7 +94,21 @@ void* uv__calloc(size_t count, size_t size) {
83
94
  }
84
95
 
85
96
  void* uv__realloc(void* ptr, size_t size) {
86
- return uv__allocator.local_realloc(ptr, size);
97
+ if (size > 0)
98
+ return uv__allocator.local_realloc(ptr, size);
99
+ uv__free(ptr);
100
+ return NULL;
101
+ }
102
+
103
+ void* uv__reallocf(void* ptr, size_t size) {
104
+ void* newptr;
105
+
106
+ newptr = uv__realloc(ptr, size);
107
+ if (newptr == NULL)
108
+ if (size > 0)
109
+ uv__free(ptr);
110
+
111
+ return newptr;
87
112
  }
88
113
 
89
114
  int uv_replace_allocator(uv_malloc_func malloc_func,
@@ -103,6 +128,39 @@ int uv_replace_allocator(uv_malloc_func malloc_func,
103
128
  return 0;
104
129
  }
105
130
 
131
+
132
+ void uv_os_free_passwd(uv_passwd_t* pwd) {
133
+ if (pwd == NULL)
134
+ return;
135
+
136
+ /* On unix, the memory for name, shell, and homedir are allocated in a single
137
+ * uv__malloc() call. The base of the pointer is stored in pwd->username, so
138
+ * that is the field that needs to be freed.
139
+ */
140
+ uv__free(pwd->username);
141
+ #ifdef _WIN32
142
+ uv__free(pwd->homedir);
143
+ #endif
144
+ pwd->username = NULL;
145
+ pwd->shell = NULL;
146
+ pwd->homedir = NULL;
147
+ }
148
+
149
+
150
+ void uv_os_free_group(uv_group_t *grp) {
151
+ if (grp == NULL)
152
+ return;
153
+
154
+ /* The memory for is allocated in a single uv__malloc() call. The base of the
155
+ * pointer is stored in grp->members, so that is the only field that needs to
156
+ * be freed.
157
+ */
158
+ uv__free(grp->members);
159
+ grp->members = NULL;
160
+ grp->groupname = NULL;
161
+ }
162
+
163
+
106
164
  #define XX(uc, lc) case UV_##uc: return sizeof(uv_##lc##_t);
107
165
 
108
166
  size_t uv_handle_size(uv_handle_type type) {
@@ -147,6 +205,18 @@ static const char* uv__unknown_err_code(int err) {
147
205
  return copy != NULL ? copy : "Unknown system error";
148
206
  }
149
207
 
208
+ #define UV_ERR_NAME_GEN_R(name, _) \
209
+ case UV_## name: \
210
+ uv__strscpy(buf, #name, buflen); break;
211
+ char* uv_err_name_r(int err, char* buf, size_t buflen) {
212
+ switch (err) {
213
+ UV_ERRNO_MAP(UV_ERR_NAME_GEN_R)
214
+ default: snprintf(buf, buflen, "Unknown system error %d", err);
215
+ }
216
+ return buf;
217
+ }
218
+ #undef UV_ERR_NAME_GEN_R
219
+
150
220
 
151
221
  #define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name;
152
222
  const char* uv_err_name(int err) {
@@ -158,6 +228,19 @@ const char* uv_err_name(int err) {
158
228
  #undef UV_ERR_NAME_GEN
159
229
 
160
230
 
231
+ #define UV_STRERROR_GEN_R(name, msg) \
232
+ case UV_ ## name: \
233
+ snprintf(buf, buflen, "%s", msg); break;
234
+ char* uv_strerror_r(int err, char* buf, size_t buflen) {
235
+ switch (err) {
236
+ UV_ERRNO_MAP(UV_STRERROR_GEN_R)
237
+ default: snprintf(buf, buflen, "Unknown system error %d", err);
238
+ }
239
+ return buf;
240
+ }
241
+ #undef UV_STRERROR_GEN_R
242
+
243
+
161
244
  #define UV_STRERROR_GEN(name, msg) case UV_ ## name: return msg;
162
245
  const char* uv_strerror(int err) {
163
246
  switch (err) {
@@ -172,6 +255,9 @@ int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr) {
172
255
  memset(addr, 0, sizeof(*addr));
173
256
  addr->sin_family = AF_INET;
174
257
  addr->sin_port = htons(port);
258
+ #ifdef SIN6_LEN
259
+ addr->sin_len = sizeof(*addr);
260
+ #endif
175
261
  return uv_inet_pton(AF_INET, ip, &(addr->sin_addr.s_addr));
176
262
  }
177
263
 
@@ -184,6 +270,9 @@ int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr) {
184
270
  memset(addr, 0, sizeof(*addr));
185
271
  addr->sin6_family = AF_INET6;
186
272
  addr->sin6_port = htons(port);
273
+ #ifdef SIN6_LEN
274
+ addr->sin6_len = sizeof(*addr);
275
+ #endif
187
276
 
188
277
  zone_index = strchr(ip, '%');
189
278
  if (zone_index != NULL) {
@@ -218,6 +307,20 @@ int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size) {
218
307
  }
219
308
 
220
309
 
310
+ int uv_ip_name(const struct sockaddr *src, char *dst, size_t size) {
311
+ switch (src->sa_family) {
312
+ case AF_INET:
313
+ return uv_inet_ntop(AF_INET, &((struct sockaddr_in *)src)->sin_addr,
314
+ dst, size);
315
+ case AF_INET6:
316
+ return uv_inet_ntop(AF_INET6, &((struct sockaddr_in6 *)src)->sin6_addr,
317
+ dst, size);
318
+ default:
319
+ return UV_EAFNOSUPPORT;
320
+ }
321
+ }
322
+
323
+
221
324
  int uv_tcp_bind(uv_tcp_t* handle,
222
325
  const struct sockaddr* addr,
223
326
  unsigned int flags) {
@@ -225,7 +328,9 @@ int uv_tcp_bind(uv_tcp_t* handle,
225
328
 
226
329
  if (handle->type != UV_TCP)
227
330
  return UV_EINVAL;
228
-
331
+ if (uv__is_closing(handle)) {
332
+ return UV_EINVAL;
333
+ }
229
334
  if (addr->sa_family == AF_INET)
230
335
  addrlen = sizeof(struct sockaddr_in);
231
336
  else if (addr->sa_family == AF_INET6)
@@ -237,6 +342,36 @@ int uv_tcp_bind(uv_tcp_t* handle,
237
342
  }
238
343
 
239
344
 
345
+ int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned flags) {
346
+ unsigned extra_flags;
347
+ int domain;
348
+ int rc;
349
+
350
+ /* Use the lower 8 bits for the domain. */
351
+ domain = flags & 0xFF;
352
+ if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC)
353
+ return UV_EINVAL;
354
+
355
+ /* Use the higher bits for extra flags. */
356
+ extra_flags = flags & ~0xFF;
357
+ if (extra_flags & ~UV_UDP_RECVMMSG)
358
+ return UV_EINVAL;
359
+
360
+ rc = uv__udp_init_ex(loop, handle, flags, domain);
361
+
362
+ if (rc == 0)
363
+ if (extra_flags & UV_UDP_RECVMMSG)
364
+ handle->flags |= UV_HANDLE_UDP_RECVMMSG;
365
+
366
+ return rc;
367
+ }
368
+
369
+
370
+ int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) {
371
+ return uv_udp_init_ex(loop, handle, AF_UNSPEC);
372
+ }
373
+
374
+
240
375
  int uv_udp_bind(uv_udp_t* handle,
241
376
  const struct sockaddr* addr,
242
377
  unsigned int flags) {
@@ -276,17 +411,20 @@ int uv_tcp_connect(uv_connect_t* req,
276
411
  }
277
412
 
278
413
 
279
- int uv_udp_send(uv_udp_send_t* req,
280
- uv_udp_t* handle,
281
- const uv_buf_t bufs[],
282
- unsigned int nbufs,
283
- const struct sockaddr* addr,
284
- uv_udp_send_cb send_cb) {
414
+ int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr) {
285
415
  unsigned int addrlen;
286
416
 
287
417
  if (handle->type != UV_UDP)
288
418
  return UV_EINVAL;
289
419
 
420
+ /* Disconnect the handle */
421
+ if (addr == NULL) {
422
+ if (!(handle->flags & UV_HANDLE_UDP_CONNECTED))
423
+ return UV_ENOTCONN;
424
+
425
+ return uv__udp_disconnect(handle);
426
+ }
427
+
290
428
  if (addr->sa_family == AF_INET)
291
429
  addrlen = sizeof(struct sockaddr_in);
292
430
  else if (addr->sa_family == AF_INET6)
@@ -294,6 +432,70 @@ int uv_udp_send(uv_udp_send_t* req,
294
432
  else
295
433
  return UV_EINVAL;
296
434
 
435
+ if (handle->flags & UV_HANDLE_UDP_CONNECTED)
436
+ return UV_EISCONN;
437
+
438
+ return uv__udp_connect(handle, addr, addrlen);
439
+ }
440
+
441
+
442
+ int uv__udp_is_connected(uv_udp_t* handle) {
443
+ struct sockaddr_storage addr;
444
+ int addrlen;
445
+ if (handle->type != UV_UDP)
446
+ return 0;
447
+
448
+ addrlen = sizeof(addr);
449
+ if (uv_udp_getpeername(handle, (struct sockaddr*) &addr, &addrlen) != 0)
450
+ return 0;
451
+
452
+ return addrlen > 0;
453
+ }
454
+
455
+
456
+ int uv__udp_check_before_send(uv_udp_t* handle, const struct sockaddr* addr) {
457
+ unsigned int addrlen;
458
+
459
+ if (handle->type != UV_UDP)
460
+ return UV_EINVAL;
461
+
462
+ if (addr != NULL && (handle->flags & UV_HANDLE_UDP_CONNECTED))
463
+ return UV_EISCONN;
464
+
465
+ if (addr == NULL && !(handle->flags & UV_HANDLE_UDP_CONNECTED))
466
+ return UV_EDESTADDRREQ;
467
+
468
+ if (addr != NULL) {
469
+ if (addr->sa_family == AF_INET)
470
+ addrlen = sizeof(struct sockaddr_in);
471
+ else if (addr->sa_family == AF_INET6)
472
+ addrlen = sizeof(struct sockaddr_in6);
473
+ #if defined(AF_UNIX) && !defined(_WIN32)
474
+ else if (addr->sa_family == AF_UNIX)
475
+ addrlen = sizeof(struct sockaddr_un);
476
+ #endif
477
+ else
478
+ return UV_EINVAL;
479
+ } else {
480
+ addrlen = 0;
481
+ }
482
+
483
+ return addrlen;
484
+ }
485
+
486
+
487
+ int uv_udp_send(uv_udp_send_t* req,
488
+ uv_udp_t* handle,
489
+ const uv_buf_t bufs[],
490
+ unsigned int nbufs,
491
+ const struct sockaddr* addr,
492
+ uv_udp_send_cb send_cb) {
493
+ int addrlen;
494
+
495
+ addrlen = uv__udp_check_before_send(handle, addr);
496
+ if (addrlen < 0)
497
+ return addrlen;
498
+
297
499
  return uv__udp_send(req, handle, bufs, nbufs, addr, addrlen, send_cb);
298
500
  }
299
501
 
@@ -302,17 +504,11 @@ int uv_udp_try_send(uv_udp_t* handle,
302
504
  const uv_buf_t bufs[],
303
505
  unsigned int nbufs,
304
506
  const struct sockaddr* addr) {
305
- unsigned int addrlen;
507
+ int addrlen;
306
508
 
307
- if (handle->type != UV_UDP)
308
- return UV_EINVAL;
309
-
310
- if (addr->sa_family == AF_INET)
311
- addrlen = sizeof(struct sockaddr_in);
312
- else if (addr->sa_family == AF_INET6)
313
- addrlen = sizeof(struct sockaddr_in6);
314
- else
315
- return UV_EINVAL;
509
+ addrlen = uv__udp_check_before_send(handle, addr);
510
+ if (addrlen < 0)
511
+ return addrlen;
316
512
 
317
513
  return uv__udp_try_send(handle, bufs, nbufs, addr, addrlen);
318
514
  }
@@ -337,19 +533,19 @@ int uv_udp_recv_stop(uv_udp_t* handle) {
337
533
 
338
534
 
339
535
  void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
340
- QUEUE queue;
341
- QUEUE* q;
536
+ struct uv__queue queue;
537
+ struct uv__queue* q;
342
538
  uv_handle_t* h;
343
539
 
344
- QUEUE_MOVE(&loop->handle_queue, &queue);
345
- while (!QUEUE_EMPTY(&queue)) {
346
- q = QUEUE_HEAD(&queue);
347
- h = QUEUE_DATA(q, uv_handle_t, handle_queue);
540
+ uv__queue_move(&loop->handle_queue, &queue);
541
+ while (!uv__queue_empty(&queue)) {
542
+ q = uv__queue_head(&queue);
543
+ h = uv__queue_data(q, uv_handle_t, handle_queue);
348
544
 
349
- QUEUE_REMOVE(q);
350
- QUEUE_INSERT_TAIL(&loop->handle_queue, q);
545
+ uv__queue_remove(q);
546
+ uv__queue_insert_tail(&loop->handle_queue, q);
351
547
 
352
- if (h->flags & UV__HANDLE_INTERNAL) continue;
548
+ if (h->flags & UV_HANDLE_INTERNAL) continue;
353
549
  walk_cb(h, arg);
354
550
  }
355
551
  }
@@ -357,14 +553,17 @@ void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
357
553
 
358
554
  static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) {
359
555
  const char* type;
360
- QUEUE* q;
556
+ struct uv__queue* q;
361
557
  uv_handle_t* h;
362
558
 
363
559
  if (loop == NULL)
364
560
  loop = uv_default_loop();
365
561
 
366
- QUEUE_FOREACH(q, &loop->handle_queue) {
367
- h = QUEUE_DATA(q, uv_handle_t, handle_queue);
562
+ if (stream == NULL)
563
+ stream = stderr;
564
+
565
+ uv__queue_foreach(q, &loop->handle_queue) {
566
+ h = uv__queue_data(q, uv_handle_t, handle_queue);
368
567
 
369
568
  if (only_active && !uv__is_active(h))
370
569
  continue;
@@ -378,9 +577,9 @@ static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) {
378
577
 
379
578
  fprintf(stream,
380
579
  "[%c%c%c] %-8s %p\n",
381
- "R-"[!(h->flags & UV__HANDLE_REF)],
382
- "A-"[!(h->flags & UV__HANDLE_ACTIVE)],
383
- "I-"[!(h->flags & UV__HANDLE_INTERNAL)],
580
+ "R-"[!(h->flags & UV_HANDLE_REF)],
581
+ "A-"[!(h->flags & UV_HANDLE_ACTIVE)],
582
+ "I-"[!(h->flags & UV_HANDLE_INTERNAL)],
384
583
  type,
385
584
  (void*)h);
386
585
  }
@@ -451,13 +650,14 @@ int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size) {
451
650
  }
452
651
 
453
652
  required_len = strlen(handle->path);
454
- if (required_len > *size) {
455
- *size = required_len;
653
+ if (required_len >= *size) {
654
+ *size = required_len + 1;
456
655
  return UV_ENOBUFS;
457
656
  }
458
657
 
459
658
  memcpy(buffer, handle->path, required_len);
460
659
  *size = required_len;
660
+ buffer[required_len] = '\0';
461
661
 
462
662
  return 0;
463
663
  }
@@ -474,34 +674,65 @@ static unsigned int* uv__get_nbufs(uv_fs_t* req) {
474
674
  #endif
475
675
  }
476
676
 
677
+ /* uv_fs_scandir() uses the system allocator to allocate memory on non-Windows
678
+ * systems. So, the memory should be released using free(). On Windows,
679
+ * uv__malloc() is used, so use uv__free() to free memory.
680
+ */
681
+ #ifdef _WIN32
682
+ # define uv__fs_scandir_free uv__free
683
+ #else
684
+ # define uv__fs_scandir_free free
685
+ #endif
686
+
477
687
  void uv__fs_scandir_cleanup(uv_fs_t* req) {
478
688
  uv__dirent_t** dents;
689
+ unsigned int* nbufs;
690
+ unsigned int i;
691
+ unsigned int n;
479
692
 
480
- unsigned int* nbufs = uv__get_nbufs(req);
693
+ if (req->result >= 0) {
694
+ dents = req->ptr;
695
+ nbufs = uv__get_nbufs(req);
481
696
 
482
- dents = req->ptr;
483
- if (*nbufs > 0 && *nbufs != (unsigned int) req->result)
484
- (*nbufs)--;
485
- for (; *nbufs < (unsigned int) req->result; (*nbufs)++)
486
- uv__free(dents[*nbufs]);
697
+ i = 0;
698
+ if (*nbufs > 0)
699
+ i = *nbufs - 1;
700
+
701
+ n = (unsigned int) req->result;
702
+ for (; i < n; i++)
703
+ uv__fs_scandir_free(dents[i]);
704
+ }
705
+
706
+ uv__fs_scandir_free(req->ptr);
707
+ req->ptr = NULL;
487
708
  }
488
709
 
489
710
 
490
711
  int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) {
491
712
  uv__dirent_t** dents;
492
713
  uv__dirent_t* dent;
714
+ unsigned int* nbufs;
715
+
716
+ /* Check to see if req passed */
717
+ if (req->result < 0)
718
+ return req->result;
719
+
720
+ /* Ptr will be null if req was canceled or no files found */
721
+ if (!req->ptr)
722
+ return UV_EOF;
493
723
 
494
- unsigned int* nbufs = uv__get_nbufs(req);
724
+ nbufs = uv__get_nbufs(req);
725
+ assert(nbufs);
495
726
 
496
727
  dents = req->ptr;
497
728
 
498
729
  /* Free previous entity */
499
730
  if (*nbufs > 0)
500
- uv__free(dents[*nbufs - 1]);
731
+ uv__fs_scandir_free(dents[*nbufs - 1]);
501
732
 
502
733
  /* End was already reached */
503
734
  if (*nbufs == (unsigned int) req->result) {
504
- uv__free(dents);
735
+ uv__fs_scandir_free(dents);
505
736
  req->ptr = NULL;
506
737
  return UV_EOF;
507
738
  }
@@ -509,37 +740,66 @@ int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) {
509
740
  dent = dents[(*nbufs)++];
510
741
 
511
742
  ent->name = dent->d_name;
743
+ ent->type = uv__fs_get_dirent_type(dent);
744
+
745
+ return 0;
746
+ }
747
+
748
+ uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t* dent) {
749
+ uv_dirent_type_t type;
750
+
512
751
  #ifdef HAVE_DIRENT_TYPES
513
752
  switch (dent->d_type) {
514
753
  case UV__DT_DIR:
515
- ent->type = UV_DIRENT_DIR;
754
+ type = UV_DIRENT_DIR;
516
755
  break;
517
756
  case UV__DT_FILE:
518
- ent->type = UV_DIRENT_FILE;
757
+ type = UV_DIRENT_FILE;
519
758
  break;
520
759
  case UV__DT_LINK:
521
- ent->type = UV_DIRENT_LINK;
760
+ type = UV_DIRENT_LINK;
522
761
  break;
523
762
  case UV__DT_FIFO:
524
- ent->type = UV_DIRENT_FIFO;
763
+ type = UV_DIRENT_FIFO;
525
764
  break;
526
765
  case UV__DT_SOCKET:
527
- ent->type = UV_DIRENT_SOCKET;
766
+ type = UV_DIRENT_SOCKET;
528
767
  break;
529
768
  case UV__DT_CHAR:
530
- ent->type = UV_DIRENT_CHAR;
769
+ type = UV_DIRENT_CHAR;
531
770
  break;
532
771
  case UV__DT_BLOCK:
533
- ent->type = UV_DIRENT_BLOCK;
772
+ type = UV_DIRENT_BLOCK;
534
773
  break;
535
774
  default:
536
- ent->type = UV_DIRENT_UNKNOWN;
775
+ type = UV_DIRENT_UNKNOWN;
537
776
  }
538
777
  #else
539
- ent->type = UV_DIRENT_UNKNOWN;
778
+ type = UV_DIRENT_UNKNOWN;
540
779
  #endif
541
780
 
542
- return 0;
781
+ return type;
782
+ }
783
+
784
+ void uv__fs_readdir_cleanup(uv_fs_t* req) {
785
+ uv_dir_t* dir;
786
+ uv_dirent_t* dirents;
787
+ int i;
788
+
789
+ if (req->ptr == NULL)
790
+ return;
791
+
792
+ dir = req->ptr;
793
+ dirents = dir->dirents;
794
+ req->ptr = NULL;
795
+
796
+ if (dirents == NULL)
797
+ return;
798
+
799
+ for (i = 0; i < req->result; ++i) {
800
+ uv__free((char*) dirents[i].name);
801
+ dirents[i].name = NULL;
802
+ }
543
803
  }
544
804
 
545
805
 
@@ -589,22 +849,27 @@ uv_loop_t* uv_loop_new(void) {
589
849
 
590
850
 
591
851
  int uv_loop_close(uv_loop_t* loop) {
592
- QUEUE* q;
852
+ struct uv__queue* q;
593
853
  uv_handle_t* h;
854
+ #ifndef NDEBUG
855
+ void* saved_data;
856
+ #endif
594
857
 
595
- if (!QUEUE_EMPTY(&(loop)->active_reqs))
858
+ if (uv__has_active_reqs(loop))
596
859
  return UV_EBUSY;
597
860
 
598
- QUEUE_FOREACH(q, &loop->handle_queue) {
599
- h = QUEUE_DATA(q, uv_handle_t, handle_queue);
600
- if (!(h->flags & UV__HANDLE_INTERNAL))
861
+ uv__queue_foreach(q, &loop->handle_queue) {
862
+ h = uv__queue_data(q, uv_handle_t, handle_queue);
863
+ if (!(h->flags & UV_HANDLE_INTERNAL))
601
864
  return UV_EBUSY;
602
865
  }
603
866
 
604
867
  uv__loop_close(loop);
605
868
 
606
869
  #ifndef NDEBUG
870
+ saved_data = loop->data;
607
871
  memset(loop, -1, sizeof(*loop));
872
+ loop->data = saved_data;
608
873
  #endif
609
874
  if (loop == default_loop_ptr)
610
875
  default_loop_ptr = NULL;
@@ -625,3 +890,140 @@ void uv_loop_delete(uv_loop_t* loop) {
625
890
  if (loop != default_loop)
626
891
  uv__free(loop);
627
892
  }
893
+
894
+
895
+ int uv_read_start(uv_stream_t* stream,
896
+ uv_alloc_cb alloc_cb,
897
+ uv_read_cb read_cb) {
898
+ if (stream == NULL || alloc_cb == NULL || read_cb == NULL)
899
+ return UV_EINVAL;
900
+
901
+ if (stream->flags & UV_HANDLE_CLOSING)
902
+ return UV_EINVAL;
903
+
904
+ if (stream->flags & UV_HANDLE_READING)
905
+ return UV_EALREADY;
906
+
907
+ if (!(stream->flags & UV_HANDLE_READABLE))
908
+ return UV_ENOTCONN;
909
+
910
+ return uv__read_start(stream, alloc_cb, read_cb);
911
+ }
912
+
913
+
914
+ void uv_os_free_environ(uv_env_item_t* envitems, int count) {
915
+ int i;
916
+
917
+ for (i = 0; i < count; i++) {
918
+ uv__free(envitems[i].name);
919
+ }
920
+
921
+ uv__free(envitems);
922
+ }
923
+
924
+
925
+ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) {
926
+ #ifdef __linux__
927
+ (void) &count;
928
+ uv__free(cpu_infos);
929
+ #else
930
+ int i;
931
+
932
+ for (i = 0; i < count; i++)
933
+ uv__free(cpu_infos[i].model);
934
+
935
+ uv__free(cpu_infos);
936
+ #endif /* __linux__ */
937
+ }
938
+
939
+
940
+ /* Also covers __clang__ and __INTEL_COMPILER. Disabled on Windows because
941
+ * threads have already been forcibly terminated by the operating system
942
+ * by the time destructors run, ergo, it's not safe to try to clean them up.
943
+ */
944
+ #if defined(__GNUC__) && !defined(_WIN32)
945
+ __attribute__((destructor))
946
+ #endif
947
+ void uv_library_shutdown(void) {
948
+ static int was_shutdown;
949
+
950
+ if (uv__exchange_int_relaxed(&was_shutdown, 1))
951
+ return;
952
+
953
+ uv__process_title_cleanup();
954
+ uv__signal_cleanup();
955
+ #ifdef __MVS__
956
+ /* TODO(itodorov) - zos: revisit when Woz compiler is available. */
957
+ uv__os390_cleanup();
958
+ #else
959
+ uv__threadpool_cleanup();
960
+ #endif
961
+ }
962
+
963
+
964
+ void uv__metrics_update_idle_time(uv_loop_t* loop) {
965
+ uv__loop_metrics_t* loop_metrics;
966
+ uint64_t entry_time;
967
+ uint64_t exit_time;
968
+
969
+ if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME))
970
+ return;
971
+
972
+ loop_metrics = uv__get_loop_metrics(loop);
973
+
974
+ /* The thread running uv__metrics_update_idle_time() is always the same
975
+ * thread that sets provider_entry_time. So it's unnecessary to lock before
976
+ * retrieving this value.
977
+ */
978
+ if (loop_metrics->provider_entry_time == 0)
979
+ return;
980
+
981
+ exit_time = uv_hrtime();
982
+
983
+ uv_mutex_lock(&loop_metrics->lock);
984
+ entry_time = loop_metrics->provider_entry_time;
985
+ loop_metrics->provider_entry_time = 0;
986
+ loop_metrics->provider_idle_time += exit_time - entry_time;
987
+ uv_mutex_unlock(&loop_metrics->lock);
988
+ }
989
+
990
+
991
+ void uv__metrics_set_provider_entry_time(uv_loop_t* loop) {
992
+ uv__loop_metrics_t* loop_metrics;
993
+ uint64_t now;
994
+
995
+ if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME))
996
+ return;
997
+
998
+ now = uv_hrtime();
999
+ loop_metrics = uv__get_loop_metrics(loop);
1000
+ uv_mutex_lock(&loop_metrics->lock);
1001
+ loop_metrics->provider_entry_time = now;
1002
+ uv_mutex_unlock(&loop_metrics->lock);
1003
+ }
1004
+
1005
+
1006
+ int uv_metrics_info(uv_loop_t* loop, uv_metrics_t* metrics) {
1007
+ memcpy(metrics,
1008
+ &uv__get_loop_metrics(loop)->metrics,
1009
+ sizeof(*metrics));
1010
+
1011
+ return 0;
1012
+ }
1013
+
1014
+
1015
+ uint64_t uv_metrics_idle_time(uv_loop_t* loop) {
1016
+ uv__loop_metrics_t* loop_metrics;
1017
+ uint64_t entry_time;
1018
+ uint64_t idle_time;
1019
+
1020
+ loop_metrics = uv__get_loop_metrics(loop);
1021
+ uv_mutex_lock(&loop_metrics->lock);
1022
+ idle_time = loop_metrics->provider_idle_time;
1023
+ entry_time = loop_metrics->provider_entry_time;
1024
+ uv_mutex_unlock(&loop_metrics->lock);
1025
+
1026
+ if (entry_time > 0)
1027
+ idle_time += uv_hrtime() - entry_time;
1028
+ return idle_time;
1029
+ }