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
@@ -1,899 +0,0 @@
1
- /* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2
- * Permission is hereby granted, free of charge, to any person obtaining a copy
3
- * of this software and associated documentation files (the "Software"), to
4
- * deal in the Software without restriction, including without limitation the
5
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6
- * sell copies of the Software, and to permit persons to whom the Software is
7
- * furnished to do so, subject to the following conditions:
8
- *
9
- * The above copyright notice and this permission notice shall be included in
10
- * all copies or substantial portions of the Software.
11
- *
12
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
18
- * IN THE SOFTWARE.
19
- */
20
-
21
- #include "uv.h"
22
- #include "internal.h"
23
-
24
- #include <stdint.h>
25
- #include <stdio.h>
26
- #include <stdlib.h>
27
- #include <string.h>
28
- #include <assert.h>
29
- #include <errno.h>
30
-
31
- #include <net/if.h>
32
- #include <sys/param.h>
33
- #include <sys/prctl.h>
34
- #include <sys/sysinfo.h>
35
- #include <unistd.h>
36
- #include <fcntl.h>
37
- #include <time.h>
38
-
39
- #define HAVE_IFADDRS_H 1
40
-
41
- #ifdef __UCLIBC__
42
- # if __UCLIBC_MAJOR__ < 0 || __UCLIBC_MINOR__ < 9 || __UCLIBC_SUBLEVEL__ < 32
43
- # undef HAVE_IFADDRS_H
44
- # endif
45
- #endif
46
-
47
- #ifdef HAVE_IFADDRS_H
48
- # if defined(__ANDROID__)
49
- # include "android-ifaddrs.h"
50
- # else
51
- # include <ifaddrs.h>
52
- # endif
53
- # include <sys/socket.h>
54
- # include <net/ethernet.h>
55
- # include <linux/if_packet.h>
56
- #endif /* HAVE_IFADDRS_H */
57
-
58
- /* Available from 2.6.32 onwards. */
59
- #ifndef CLOCK_MONOTONIC_COARSE
60
- # define CLOCK_MONOTONIC_COARSE 6
61
- #endif
62
-
63
- /* This is rather annoying: CLOCK_BOOTTIME lives in <linux/time.h> but we can't
64
- * include that file because it conflicts with <time.h>. We'll just have to
65
- * define it ourselves.
66
- */
67
- #ifndef CLOCK_BOOTTIME
68
- # define CLOCK_BOOTTIME 7
69
- #endif
70
-
71
- static int read_models(unsigned int numcpus, uv_cpu_info_t* ci);
72
- static int read_times(unsigned int numcpus, uv_cpu_info_t* ci);
73
- static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci);
74
- static unsigned long read_cpufreq(unsigned int cpunum);
75
-
76
-
77
- int uv__platform_loop_init(uv_loop_t* loop) {
78
- int fd;
79
-
80
- fd = uv__epoll_create1(UV__EPOLL_CLOEXEC);
81
-
82
- /* epoll_create1() can fail either because it's not implemented (old kernel)
83
- * or because it doesn't understand the EPOLL_CLOEXEC flag.
84
- */
85
- if (fd == -1 && (errno == ENOSYS || errno == EINVAL)) {
86
- fd = uv__epoll_create(256);
87
-
88
- if (fd != -1)
89
- uv__cloexec(fd, 1);
90
- }
91
-
92
- loop->backend_fd = fd;
93
- loop->inotify_fd = -1;
94
- loop->inotify_watchers = NULL;
95
-
96
- if (fd == -1)
97
- return -errno;
98
-
99
- return 0;
100
- }
101
-
102
-
103
- void uv__platform_loop_delete(uv_loop_t* loop) {
104
- if (loop->inotify_fd == -1) return;
105
- uv__io_stop(loop, &loop->inotify_read_watcher, UV__POLLIN);
106
- uv__close(loop->inotify_fd);
107
- loop->inotify_fd = -1;
108
- }
109
-
110
-
111
- void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
112
- struct uv__epoll_event* events;
113
- struct uv__epoll_event dummy;
114
- uintptr_t i;
115
- uintptr_t nfds;
116
-
117
- assert(loop->watchers != NULL);
118
-
119
- events = (struct uv__epoll_event*) loop->watchers[loop->nwatchers];
120
- nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1];
121
- if (events != NULL)
122
- /* Invalidate events with same file descriptor */
123
- for (i = 0; i < nfds; i++)
124
- if ((int) events[i].data == fd)
125
- events[i].data = -1;
126
-
127
- /* Remove the file descriptor from the epoll.
128
- * This avoids a problem where the same file description remains open
129
- * in another process, causing repeated junk epoll events.
130
- *
131
- * We pass in a dummy epoll_event, to work around a bug in old kernels.
132
- */
133
- if (loop->backend_fd >= 0) {
134
- /* Work around a bug in kernels 3.10 to 3.19 where passing a struct that
135
- * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
136
- */
137
- memset(&dummy, 0, sizeof(dummy));
138
- uv__epoll_ctl(loop->backend_fd, UV__EPOLL_CTL_DEL, fd, &dummy);
139
- }
140
- }
141
-
142
-
143
- void uv__io_poll(uv_loop_t* loop, int timeout) {
144
- /* A bug in kernels < 2.6.37 makes timeouts larger than ~30 minutes
145
- * effectively infinite on 32 bits architectures. To avoid blocking
146
- * indefinitely, we cap the timeout and poll again if necessary.
147
- *
148
- * Note that "30 minutes" is a simplification because it depends on
149
- * the value of CONFIG_HZ. The magic constant assumes CONFIG_HZ=1200,
150
- * that being the largest value I have seen in the wild (and only once.)
151
- */
152
- static const int max_safe_timeout = 1789569;
153
- static int no_epoll_pwait;
154
- static int no_epoll_wait;
155
- struct uv__epoll_event events[1024];
156
- struct uv__epoll_event* pe;
157
- struct uv__epoll_event e;
158
- int real_timeout;
159
- QUEUE* q;
160
- uv__io_t* w;
161
- sigset_t sigset;
162
- uint64_t sigmask;
163
- uint64_t base;
164
- int nevents;
165
- int count;
166
- int nfds;
167
- int fd;
168
- int op;
169
- int i;
170
-
171
- if (loop->nfds == 0) {
172
- assert(QUEUE_EMPTY(&loop->watcher_queue));
173
- return;
174
- }
175
-
176
- while (!QUEUE_EMPTY(&loop->watcher_queue)) {
177
- q = QUEUE_HEAD(&loop->watcher_queue);
178
- QUEUE_REMOVE(q);
179
- QUEUE_INIT(q);
180
-
181
- w = QUEUE_DATA(q, uv__io_t, watcher_queue);
182
- assert(w->pevents != 0);
183
- assert(w->fd >= 0);
184
- assert(w->fd < (int) loop->nwatchers);
185
-
186
- e.events = w->pevents;
187
- e.data = w->fd;
188
-
189
- if (w->events == 0)
190
- op = UV__EPOLL_CTL_ADD;
191
- else
192
- op = UV__EPOLL_CTL_MOD;
193
-
194
- /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching
195
- * events, skip the syscall and squelch the events after epoll_wait().
196
- */
197
- if (uv__epoll_ctl(loop->backend_fd, op, w->fd, &e)) {
198
- if (errno != EEXIST)
199
- abort();
200
-
201
- assert(op == UV__EPOLL_CTL_ADD);
202
-
203
- /* We've reactivated a file descriptor that's been watched before. */
204
- if (uv__epoll_ctl(loop->backend_fd, UV__EPOLL_CTL_MOD, w->fd, &e))
205
- abort();
206
- }
207
-
208
- w->events = w->pevents;
209
- }
210
-
211
- sigmask = 0;
212
- if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
213
- sigemptyset(&sigset);
214
- sigaddset(&sigset, SIGPROF);
215
- sigmask |= 1 << (SIGPROF - 1);
216
- }
217
-
218
- assert(timeout >= -1);
219
- base = loop->time;
220
- count = 48; /* Benchmarks suggest this gives the best throughput. */
221
- real_timeout = timeout;
222
-
223
- for (;;) {
224
- /* See the comment for max_safe_timeout for an explanation of why
225
- * this is necessary. Executive summary: kernel bug workaround.
226
- */
227
- if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
228
- timeout = max_safe_timeout;
229
-
230
- if (sigmask != 0 && no_epoll_pwait != 0)
231
- if (pthread_sigmask(SIG_BLOCK, &sigset, NULL))
232
- abort();
233
-
234
- if (no_epoll_wait != 0 || (sigmask != 0 && no_epoll_pwait == 0)) {
235
- nfds = uv__epoll_pwait(loop->backend_fd,
236
- events,
237
- ARRAY_SIZE(events),
238
- timeout,
239
- sigmask);
240
- if (nfds == -1 && errno == ENOSYS)
241
- no_epoll_pwait = 1;
242
- } else {
243
- nfds = uv__epoll_wait(loop->backend_fd,
244
- events,
245
- ARRAY_SIZE(events),
246
- timeout);
247
- if (nfds == -1 && errno == ENOSYS)
248
- no_epoll_wait = 1;
249
- }
250
-
251
- if (sigmask != 0 && no_epoll_pwait != 0)
252
- if (pthread_sigmask(SIG_UNBLOCK, &sigset, NULL))
253
- abort();
254
-
255
- /* Update loop->time unconditionally. It's tempting to skip the update when
256
- * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the
257
- * operating system didn't reschedule our process while in the syscall.
258
- */
259
- SAVE_ERRNO(uv__update_time(loop));
260
-
261
- if (nfds == 0) {
262
- assert(timeout != -1);
263
-
264
- timeout = real_timeout - timeout;
265
- if (timeout > 0)
266
- continue;
267
-
268
- return;
269
- }
270
-
271
- if (nfds == -1) {
272
- if (errno == ENOSYS) {
273
- /* epoll_wait() or epoll_pwait() failed, try the other system call. */
274
- assert(no_epoll_wait == 0 || no_epoll_pwait == 0);
275
- continue;
276
- }
277
-
278
- if (errno != EINTR)
279
- abort();
280
-
281
- if (timeout == -1)
282
- continue;
283
-
284
- if (timeout == 0)
285
- return;
286
-
287
- /* Interrupted by a signal. Update timeout and poll again. */
288
- goto update_timeout;
289
- }
290
-
291
- nevents = 0;
292
-
293
- assert(loop->watchers != NULL);
294
- loop->watchers[loop->nwatchers] = (void*) events;
295
- loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds;
296
- for (i = 0; i < nfds; i++) {
297
- pe = events + i;
298
- fd = pe->data;
299
-
300
- /* Skip invalidated events, see uv__platform_invalidate_fd */
301
- if (fd == -1)
302
- continue;
303
-
304
- assert(fd >= 0);
305
- assert((unsigned) fd < loop->nwatchers);
306
-
307
- w = loop->watchers[fd];
308
-
309
- if (w == NULL) {
310
- /* File descriptor that we've stopped watching, disarm it.
311
- *
312
- * Ignore all errors because we may be racing with another thread
313
- * when the file descriptor is closed.
314
- */
315
- uv__epoll_ctl(loop->backend_fd, UV__EPOLL_CTL_DEL, fd, pe);
316
- continue;
317
- }
318
-
319
- /* Give users only events they're interested in. Prevents spurious
320
- * callbacks when previous callback invocation in this loop has stopped
321
- * the current watcher. Also, filters out events that users has not
322
- * requested us to watch.
323
- */
324
- pe->events &= w->pevents | UV__POLLERR | UV__POLLHUP;
325
-
326
- /* Work around an epoll quirk where it sometimes reports just the
327
- * EPOLLERR or EPOLLHUP event. In order to force the event loop to
328
- * move forward, we merge in the read/write events that the watcher
329
- * is interested in; uv__read() and uv__write() will then deal with
330
- * the error or hangup in the usual fashion.
331
- *
332
- * Note to self: happens when epoll reports EPOLLIN|EPOLLHUP, the user
333
- * reads the available data, calls uv_read_stop(), then sometime later
334
- * calls uv_read_start() again. By then, libuv has forgotten about the
335
- * hangup and the kernel won't report EPOLLIN again because there's
336
- * nothing left to read. If anything, libuv is to blame here. The
337
- * current hack is just a quick bandaid; to properly fix it, libuv
338
- * needs to remember the error/hangup event. We should get that for
339
- * free when we switch over to edge-triggered I/O.
340
- */
341
- if (pe->events == UV__EPOLLERR || pe->events == UV__EPOLLHUP)
342
- pe->events |= w->pevents & (UV__EPOLLIN | UV__EPOLLOUT);
343
-
344
- if (pe->events != 0) {
345
- w->cb(loop, w, pe->events);
346
- nevents++;
347
- }
348
- }
349
- loop->watchers[loop->nwatchers] = NULL;
350
- loop->watchers[loop->nwatchers + 1] = NULL;
351
-
352
- if (nevents != 0) {
353
- if (nfds == ARRAY_SIZE(events) && --count != 0) {
354
- /* Poll for more events but don't block this time. */
355
- timeout = 0;
356
- continue;
357
- }
358
- return;
359
- }
360
-
361
- if (timeout == 0)
362
- return;
363
-
364
- if (timeout == -1)
365
- continue;
366
-
367
- update_timeout:
368
- assert(timeout > 0);
369
-
370
- real_timeout -= (loop->time - base);
371
- if (real_timeout <= 0)
372
- return;
373
-
374
- timeout = real_timeout;
375
- }
376
- }
377
-
378
-
379
- uint64_t uv__hrtime(uv_clocktype_t type) {
380
- static clock_t fast_clock_id = -1;
381
- struct timespec t;
382
- clock_t clock_id;
383
-
384
- /* Prefer CLOCK_MONOTONIC_COARSE if available but only when it has
385
- * millisecond granularity or better. CLOCK_MONOTONIC_COARSE is
386
- * serviced entirely from the vDSO, whereas CLOCK_MONOTONIC may
387
- * decide to make a costly system call.
388
- */
389
- /* TODO(bnoordhuis) Use CLOCK_MONOTONIC_COARSE for UV_CLOCK_PRECISE
390
- * when it has microsecond granularity or better (unlikely).
391
- */
392
- if (type == UV_CLOCK_FAST && fast_clock_id == -1) {
393
- if (clock_getres(CLOCK_MONOTONIC_COARSE, &t) == 0 &&
394
- t.tv_nsec <= 1 * 1000 * 1000) {
395
- fast_clock_id = CLOCK_MONOTONIC_COARSE;
396
- } else {
397
- fast_clock_id = CLOCK_MONOTONIC;
398
- }
399
- }
400
-
401
- clock_id = CLOCK_MONOTONIC;
402
- if (type == UV_CLOCK_FAST)
403
- clock_id = fast_clock_id;
404
-
405
- if (clock_gettime(clock_id, &t))
406
- return 0; /* Not really possible. */
407
-
408
- return t.tv_sec * (uint64_t) 1e9 + t.tv_nsec;
409
- }
410
-
411
-
412
- void uv_loadavg(double avg[3]) {
413
- struct sysinfo info;
414
-
415
- if (sysinfo(&info) < 0) return;
416
-
417
- avg[0] = (double) info.loads[0] / 65536.0;
418
- avg[1] = (double) info.loads[1] / 65536.0;
419
- avg[2] = (double) info.loads[2] / 65536.0;
420
- }
421
-
422
-
423
- int uv_exepath(char* buffer, size_t* size) {
424
- ssize_t n;
425
-
426
- if (buffer == NULL || size == NULL || *size == 0)
427
- return -EINVAL;
428
-
429
- n = *size - 1;
430
- if (n > 0)
431
- n = readlink("/proc/self/exe", buffer, n);
432
-
433
- if (n == -1)
434
- return -errno;
435
-
436
- buffer[n] = '\0';
437
- *size = n;
438
-
439
- return 0;
440
- }
441
-
442
-
443
- uint64_t uv_get_free_memory(void) {
444
- return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES);
445
- }
446
-
447
-
448
- uint64_t uv_get_total_memory(void) {
449
- return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES);
450
- }
451
-
452
-
453
- int uv_resident_set_memory(size_t* rss) {
454
- char buf[1024];
455
- const char* s;
456
- ssize_t n;
457
- long val;
458
- int fd;
459
- int i;
460
-
461
- do
462
- fd = open("/proc/self/stat", O_RDONLY);
463
- while (fd == -1 && errno == EINTR);
464
-
465
- if (fd == -1)
466
- return -errno;
467
-
468
- do
469
- n = read(fd, buf, sizeof(buf) - 1);
470
- while (n == -1 && errno == EINTR);
471
-
472
- uv__close(fd);
473
- if (n == -1)
474
- return -errno;
475
- buf[n] = '\0';
476
-
477
- s = strchr(buf, ' ');
478
- if (s == NULL)
479
- goto err;
480
-
481
- s += 1;
482
- if (*s != '(')
483
- goto err;
484
-
485
- s = strchr(s, ')');
486
- if (s == NULL)
487
- goto err;
488
-
489
- for (i = 1; i <= 22; i++) {
490
- s = strchr(s + 1, ' ');
491
- if (s == NULL)
492
- goto err;
493
- }
494
-
495
- errno = 0;
496
- val = strtol(s, NULL, 10);
497
- if (errno != 0)
498
- goto err;
499
- if (val < 0)
500
- goto err;
501
-
502
- *rss = val * getpagesize();
503
- return 0;
504
-
505
- err:
506
- return -EINVAL;
507
- }
508
-
509
-
510
- int uv_uptime(double* uptime) {
511
- static volatile int no_clock_boottime;
512
- struct timespec now;
513
- int r;
514
-
515
- /* Try CLOCK_BOOTTIME first, fall back to CLOCK_MONOTONIC if not available
516
- * (pre-2.6.39 kernels). CLOCK_MONOTONIC doesn't increase when the system
517
- * is suspended.
518
- */
519
- if (no_clock_boottime) {
520
- retry: r = clock_gettime(CLOCK_MONOTONIC, &now);
521
- }
522
- else if ((r = clock_gettime(CLOCK_BOOTTIME, &now)) && errno == EINVAL) {
523
- no_clock_boottime = 1;
524
- goto retry;
525
- }
526
-
527
- if (r)
528
- return -errno;
529
-
530
- *uptime = now.tv_sec;
531
- return 0;
532
- }
533
-
534
-
535
- int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
536
- unsigned int numcpus;
537
- uv_cpu_info_t* ci;
538
- int err;
539
-
540
- *cpu_infos = NULL;
541
- *count = 0;
542
-
543
- numcpus = sysconf(_SC_NPROCESSORS_ONLN);
544
- assert(numcpus != (unsigned int) -1);
545
- assert(numcpus != 0);
546
-
547
- ci = uv__calloc(numcpus, sizeof(*ci));
548
- if (ci == NULL)
549
- return -ENOMEM;
550
-
551
- err = read_models(numcpus, ci);
552
- if (err == 0)
553
- err = read_times(numcpus, ci);
554
-
555
- if (err) {
556
- uv_free_cpu_info(ci, numcpus);
557
- return err;
558
- }
559
-
560
- /* read_models() on x86 also reads the CPU speed from /proc/cpuinfo.
561
- * We don't check for errors here. Worst case, the field is left zero.
562
- */
563
- if (ci[0].speed == 0)
564
- read_speeds(numcpus, ci);
565
-
566
- *cpu_infos = ci;
567
- *count = numcpus;
568
-
569
- return 0;
570
- }
571
-
572
-
573
- static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci) {
574
- unsigned int num;
575
-
576
- for (num = 0; num < numcpus; num++)
577
- ci[num].speed = read_cpufreq(num) / 1000;
578
- }
579
-
580
-
581
- /* Also reads the CPU frequency on x86. The other architectures only have
582
- * a BogoMIPS field, which may not be very accurate.
583
- *
584
- * Note: Simply returns on error, uv_cpu_info() takes care of the cleanup.
585
- */
586
- static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) {
587
- static const char model_marker[] = "model name\t: ";
588
- static const char speed_marker[] = "cpu MHz\t\t: ";
589
- const char* inferred_model;
590
- unsigned int model_idx;
591
- unsigned int speed_idx;
592
- char buf[1024];
593
- char* model;
594
- FILE* fp;
595
-
596
- /* Most are unused on non-ARM, non-MIPS and non-x86 architectures. */
597
- (void) &model_marker;
598
- (void) &speed_marker;
599
- (void) &speed_idx;
600
- (void) &model;
601
- (void) &buf;
602
- (void) &fp;
603
-
604
- model_idx = 0;
605
- speed_idx = 0;
606
-
607
- #if defined(__arm__) || \
608
- defined(__i386__) || \
609
- defined(__mips__) || \
610
- defined(__x86_64__)
611
- fp = fopen("/proc/cpuinfo", "r");
612
- if (fp == NULL)
613
- return -errno;
614
-
615
- while (fgets(buf, sizeof(buf), fp)) {
616
- if (model_idx < numcpus) {
617
- if (strncmp(buf, model_marker, sizeof(model_marker) - 1) == 0) {
618
- model = buf + sizeof(model_marker) - 1;
619
- model = uv__strndup(model, strlen(model) - 1); /* Strip newline. */
620
- if (model == NULL) {
621
- fclose(fp);
622
- return -ENOMEM;
623
- }
624
- ci[model_idx++].model = model;
625
- continue;
626
- }
627
- }
628
- #if defined(__arm__) || defined(__mips__)
629
- if (model_idx < numcpus) {
630
- #if defined(__arm__)
631
- /* Fallback for pre-3.8 kernels. */
632
- static const char model_marker[] = "Processor\t: ";
633
- #else /* defined(__mips__) */
634
- static const char model_marker[] = "cpu model\t\t: ";
635
- #endif
636
- if (strncmp(buf, model_marker, sizeof(model_marker) - 1) == 0) {
637
- model = buf + sizeof(model_marker) - 1;
638
- model = uv__strndup(model, strlen(model) - 1); /* Strip newline. */
639
- if (model == NULL) {
640
- fclose(fp);
641
- return -ENOMEM;
642
- }
643
- ci[model_idx++].model = model;
644
- continue;
645
- }
646
- }
647
- #else /* !__arm__ && !__mips__ */
648
- if (speed_idx < numcpus) {
649
- if (strncmp(buf, speed_marker, sizeof(speed_marker) - 1) == 0) {
650
- ci[speed_idx++].speed = atoi(buf + sizeof(speed_marker) - 1);
651
- continue;
652
- }
653
- }
654
- #endif /* __arm__ || __mips__ */
655
- }
656
-
657
- fclose(fp);
658
- #endif /* __arm__ || __i386__ || __mips__ || __x86_64__ */
659
-
660
- /* Now we want to make sure that all the models contain *something* because
661
- * it's not safe to leave them as null. Copy the last entry unless there
662
- * isn't one, in that case we simply put "unknown" into everything.
663
- */
664
- inferred_model = "unknown";
665
- if (model_idx > 0)
666
- inferred_model = ci[model_idx - 1].model;
667
-
668
- while (model_idx < numcpus) {
669
- model = uv__strndup(inferred_model, strlen(inferred_model));
670
- if (model == NULL)
671
- return -ENOMEM;
672
- ci[model_idx++].model = model;
673
- }
674
-
675
- return 0;
676
- }
677
-
678
-
679
- static int read_times(unsigned int numcpus, uv_cpu_info_t* ci) {
680
- unsigned long clock_ticks;
681
- struct uv_cpu_times_s ts;
682
- unsigned long user;
683
- unsigned long nice;
684
- unsigned long sys;
685
- unsigned long idle;
686
- unsigned long dummy;
687
- unsigned long irq;
688
- unsigned int num;
689
- unsigned int len;
690
- char buf[1024];
691
- FILE* fp;
692
-
693
- clock_ticks = sysconf(_SC_CLK_TCK);
694
- assert(clock_ticks != (unsigned long) -1);
695
- assert(clock_ticks != 0);
696
-
697
- fp = fopen("/proc/stat", "r");
698
- if (fp == NULL)
699
- return -errno;
700
-
701
- if (!fgets(buf, sizeof(buf), fp))
702
- abort();
703
-
704
- num = 0;
705
-
706
- while (fgets(buf, sizeof(buf), fp)) {
707
- if (num >= numcpus)
708
- break;
709
-
710
- if (strncmp(buf, "cpu", 3))
711
- break;
712
-
713
- /* skip "cpu<num> " marker */
714
- {
715
- unsigned int n;
716
- int r = sscanf(buf, "cpu%u ", &n);
717
- assert(r == 1);
718
- (void) r; /* silence build warning */
719
- for (len = sizeof("cpu0"); n /= 10; len++);
720
- }
721
-
722
- /* Line contains user, nice, system, idle, iowait, irq, softirq, steal,
723
- * guest, guest_nice but we're only interested in the first four + irq.
724
- *
725
- * Don't use %*s to skip fields or %ll to read straight into the uint64_t
726
- * fields, they're not allowed in C89 mode.
727
- */
728
- if (6 != sscanf(buf + len,
729
- "%lu %lu %lu %lu %lu %lu",
730
- &user,
731
- &nice,
732
- &sys,
733
- &idle,
734
- &dummy,
735
- &irq))
736
- abort();
737
-
738
- ts.user = clock_ticks * user;
739
- ts.nice = clock_ticks * nice;
740
- ts.sys = clock_ticks * sys;
741
- ts.idle = clock_ticks * idle;
742
- ts.irq = clock_ticks * irq;
743
- ci[num++].cpu_times = ts;
744
- }
745
- fclose(fp);
746
- assert(num == numcpus);
747
-
748
- return 0;
749
- }
750
-
751
-
752
- static unsigned long read_cpufreq(unsigned int cpunum) {
753
- unsigned long val;
754
- char buf[1024];
755
- FILE* fp;
756
-
757
- snprintf(buf,
758
- sizeof(buf),
759
- "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_cur_freq",
760
- cpunum);
761
-
762
- fp = fopen(buf, "r");
763
- if (fp == NULL)
764
- return 0;
765
-
766
- if (fscanf(fp, "%lu", &val) != 1)
767
- val = 0;
768
-
769
- fclose(fp);
770
-
771
- return val;
772
- }
773
-
774
-
775
- void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) {
776
- int i;
777
-
778
- for (i = 0; i < count; i++) {
779
- uv__free(cpu_infos[i].model);
780
- }
781
-
782
- uv__free(cpu_infos);
783
- }
784
-
785
-
786
- int uv_interface_addresses(uv_interface_address_t** addresses,
787
- int* count) {
788
- #ifndef HAVE_IFADDRS_H
789
- return -ENOSYS;
790
- #else
791
- struct ifaddrs *addrs, *ent;
792
- uv_interface_address_t* address;
793
- int i;
794
- struct sockaddr_ll *sll;
795
-
796
- if (getifaddrs(&addrs))
797
- return -errno;
798
-
799
- *count = 0;
800
- *addresses = NULL;
801
-
802
- /* Count the number of interfaces */
803
- for (ent = addrs; ent != NULL; ent = ent->ifa_next) {
804
- if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING)) ||
805
- (ent->ifa_addr == NULL) ||
806
- (ent->ifa_addr->sa_family == PF_PACKET)) {
807
- continue;
808
- }
809
-
810
- (*count)++;
811
- }
812
-
813
- if (*count == 0)
814
- return 0;
815
-
816
- *addresses = uv__malloc(*count * sizeof(**addresses));
817
- if (!(*addresses)) {
818
- freeifaddrs(addrs);
819
- return -ENOMEM;
820
- }
821
-
822
- address = *addresses;
823
-
824
- for (ent = addrs; ent != NULL; ent = ent->ifa_next) {
825
- if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING)))
826
- continue;
827
-
828
- if (ent->ifa_addr == NULL)
829
- continue;
830
-
831
- /*
832
- * On Linux getifaddrs returns information related to the raw underlying
833
- * devices. We're not interested in this information yet.
834
- */
835
- if (ent->ifa_addr->sa_family == PF_PACKET)
836
- continue;
837
-
838
- address->name = uv__strdup(ent->ifa_name);
839
-
840
- if (ent->ifa_addr->sa_family == AF_INET6) {
841
- address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr);
842
- } else {
843
- address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr);
844
- }
845
-
846
- if (ent->ifa_netmask->sa_family == AF_INET6) {
847
- address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask);
848
- } else {
849
- address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask);
850
- }
851
-
852
- address->is_internal = !!(ent->ifa_flags & IFF_LOOPBACK);
853
-
854
- address++;
855
- }
856
-
857
- /* Fill in physical addresses for each interface */
858
- for (ent = addrs; ent != NULL; ent = ent->ifa_next) {
859
- if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING)) ||
860
- (ent->ifa_addr == NULL) ||
861
- (ent->ifa_addr->sa_family != PF_PACKET)) {
862
- continue;
863
- }
864
-
865
- address = *addresses;
866
-
867
- for (i = 0; i < (*count); i++) {
868
- if (strcmp(address->name, ent->ifa_name) == 0) {
869
- sll = (struct sockaddr_ll*)ent->ifa_addr;
870
- memcpy(address->phys_addr, sll->sll_addr, sizeof(address->phys_addr));
871
- }
872
- address++;
873
- }
874
- }
875
-
876
- freeifaddrs(addrs);
877
-
878
- return 0;
879
- #endif
880
- }
881
-
882
-
883
- void uv_free_interface_addresses(uv_interface_address_t* addresses,
884
- int count) {
885
- int i;
886
-
887
- for (i = 0; i < count; i++) {
888
- uv__free(addresses[i].name);
889
- }
890
-
891
- uv__free(addresses);
892
- }
893
-
894
-
895
- void uv__set_process_title(const char* title) {
896
- #if defined(PR_SET_NAME)
897
- prctl(PR_SET_NAME, title); /* Only copies first 16 characters. */
898
- #endif
899
- }