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
@@ -27,57 +27,263 @@
27
27
  #include <errno.h>
28
28
 
29
29
  #include <sys/time.h>
30
+ #include <sys/resource.h> /* getrlimit() */
31
+ #include <unistd.h> /* getpagesize() */
32
+
33
+ #include <limits.h>
34
+
35
+ #ifdef __MVS__
36
+ #include <sys/ipc.h>
37
+ #include <sys/sem.h>
38
+ #endif
39
+
40
+ #if defined(__GLIBC__) && !defined(__UCLIBC__)
41
+ #include <gnu/libc-version.h> /* gnu_get_libc_version() */
42
+ #endif
43
+
44
+ #if defined(__linux__)
45
+ # include <sched.h>
46
+ # define uv__cpu_set_t cpu_set_t
47
+ #elif defined(__FreeBSD__)
48
+ # include <sys/param.h>
49
+ # include <sys/cpuset.h>
50
+ # include <pthread_np.h>
51
+ # define uv__cpu_set_t cpuset_t
52
+ #endif
53
+
30
54
 
31
55
  #undef NANOSEC
32
56
  #define NANOSEC ((uint64_t) 1e9)
33
57
 
58
+ /* Musl's PTHREAD_STACK_MIN is 2 KB on all architectures, which is
59
+ * too small to safely receive signals on.
60
+ *
61
+ * Musl's PTHREAD_STACK_MIN + MINSIGSTKSZ == 8192 on arm64 (which has
62
+ * the largest MINSIGSTKSZ of the architectures that musl supports) so
63
+ * let's use that as a lower bound.
64
+ *
65
+ * We use a hardcoded value because PTHREAD_STACK_MIN + MINSIGSTKSZ
66
+ * is between 28 and 133 KB when compiling against glibc, depending
67
+ * on the architecture.
68
+ */
69
+ static size_t uv__min_stack_size(void) {
70
+ static const size_t min = 8192;
34
71
 
35
- struct thread_ctx {
36
- void (*entry)(void* arg);
37
- void* arg;
38
- };
39
-
72
+ #ifdef PTHREAD_STACK_MIN /* Not defined on NetBSD. */
73
+ if (min < (size_t) PTHREAD_STACK_MIN)
74
+ return PTHREAD_STACK_MIN;
75
+ #endif /* PTHREAD_STACK_MIN */
40
76
 
41
- static void* uv__thread_start(void *arg)
42
- {
43
- struct thread_ctx *ctx_p;
44
- struct thread_ctx ctx;
77
+ return min;
78
+ }
45
79
 
46
- ctx_p = arg;
47
- ctx = *ctx_p;
48
- uv__free(ctx_p);
49
- ctx.entry(ctx.arg);
50
80
 
81
+ /* On Linux, threads created by musl have a much smaller stack than threads
82
+ * created by glibc (80 vs. 2048 or 4096 kB.) Follow glibc for consistency.
83
+ */
84
+ static size_t uv__default_stack_size(void) {
85
+ #if !defined(__linux__)
51
86
  return 0;
87
+ #elif defined(__PPC__) || defined(__ppc__) || defined(__powerpc__)
88
+ return 4 << 20; /* glibc default. */
89
+ #else
90
+ return 2 << 20; /* glibc default. */
91
+ #endif
92
+ }
93
+
94
+
95
+ /* On MacOS, threads other than the main thread are created with a reduced
96
+ * stack size by default. Adjust to RLIMIT_STACK aligned to the page size.
97
+ */
98
+ size_t uv__thread_stack_size(void) {
99
+ #if defined(__APPLE__) || defined(__linux__)
100
+ struct rlimit lim;
101
+
102
+ /* getrlimit() can fail on some aarch64 systems due to a glibc bug where
103
+ * the system call wrapper invokes the wrong system call. Don't treat
104
+ * that as fatal, just use the default stack size instead.
105
+ */
106
+ if (getrlimit(RLIMIT_STACK, &lim))
107
+ return uv__default_stack_size();
108
+
109
+ if (lim.rlim_cur == RLIM_INFINITY)
110
+ return uv__default_stack_size();
111
+
112
+ /* pthread_attr_setstacksize() expects page-aligned values. */
113
+ lim.rlim_cur -= lim.rlim_cur % (rlim_t) getpagesize();
114
+
115
+ if (lim.rlim_cur >= (rlim_t) uv__min_stack_size())
116
+ return lim.rlim_cur;
117
+ #endif
118
+
119
+ return uv__default_stack_size();
52
120
  }
53
121
 
54
122
 
55
123
  int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) {
56
- struct thread_ctx* ctx;
124
+ uv_thread_options_t params;
125
+ params.flags = UV_THREAD_NO_FLAGS;
126
+ return uv_thread_create_ex(tid, &params, entry, arg);
127
+ }
128
+
129
+ int uv_thread_create_ex(uv_thread_t* tid,
130
+ const uv_thread_options_t* params,
131
+ void (*entry)(void *arg),
132
+ void *arg) {
57
133
  int err;
134
+ pthread_attr_t* attr;
135
+ pthread_attr_t attr_storage;
136
+ size_t pagesize;
137
+ size_t stack_size;
138
+ size_t min_stack_size;
139
+
140
+ /* Used to squelch a -Wcast-function-type warning. */
141
+ union {
142
+ void (*in)(void*);
143
+ void* (*out)(void*);
144
+ } f;
145
+
146
+ stack_size =
147
+ params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0;
148
+
149
+ attr = NULL;
150
+ if (stack_size == 0) {
151
+ stack_size = uv__thread_stack_size();
152
+ } else {
153
+ pagesize = (size_t)getpagesize();
154
+ /* Round up to the nearest page boundary. */
155
+ stack_size = (stack_size + pagesize - 1) &~ (pagesize - 1);
156
+ min_stack_size = uv__min_stack_size();
157
+ if (stack_size < min_stack_size)
158
+ stack_size = min_stack_size;
159
+ }
58
160
 
59
- ctx = uv__malloc(sizeof(*ctx));
60
- if (ctx == NULL)
61
- return UV_ENOMEM;
161
+ if (stack_size > 0) {
162
+ attr = &attr_storage;
62
163
 
63
- ctx->entry = entry;
64
- ctx->arg = arg;
164
+ if (pthread_attr_init(attr))
165
+ abort();
65
166
 
66
- err = pthread_create(tid, NULL, uv__thread_start, ctx);
167
+ if (pthread_attr_setstacksize(attr, stack_size))
168
+ abort();
169
+ }
67
170
 
68
- if (err)
69
- uv__free(ctx);
171
+ f.in = entry;
172
+ err = pthread_create(tid, attr, f.out, arg);
173
+
174
+ if (attr != NULL)
175
+ pthread_attr_destroy(attr);
176
+
177
+ return UV__ERR(err);
178
+ }
179
+
180
+ #if UV__CPU_AFFINITY_SUPPORTED
181
+
182
+ int uv_thread_setaffinity(uv_thread_t* tid,
183
+ char* cpumask,
184
+ char* oldmask,
185
+ size_t mask_size) {
186
+ int i;
187
+ int r;
188
+ uv__cpu_set_t cpuset;
189
+ int cpumasksize;
190
+
191
+ cpumasksize = uv_cpumask_size();
192
+ if (cpumasksize < 0)
193
+ return cpumasksize;
194
+ if (mask_size < (size_t)cpumasksize)
195
+ return UV_EINVAL;
196
+
197
+ if (oldmask != NULL) {
198
+ r = uv_thread_getaffinity(tid, oldmask, mask_size);
199
+ if (r < 0)
200
+ return r;
201
+ }
202
+
203
+ CPU_ZERO(&cpuset);
204
+ for (i = 0; i < cpumasksize; i++)
205
+ if (cpumask[i])
206
+ CPU_SET(i, &cpuset);
207
+
208
+ #if defined(__ANDROID__)
209
+ if (sched_setaffinity(pthread_gettid_np(*tid), sizeof(cpuset), &cpuset))
210
+ r = errno;
211
+ else
212
+ r = 0;
213
+ #else
214
+ r = pthread_setaffinity_np(*tid, sizeof(cpuset), &cpuset);
215
+ #endif
70
216
 
71
- return -err;
217
+ return UV__ERR(r);
72
218
  }
73
219
 
74
220
 
221
+ int uv_thread_getaffinity(uv_thread_t* tid,
222
+ char* cpumask,
223
+ size_t mask_size) {
224
+ int r;
225
+ int i;
226
+ uv__cpu_set_t cpuset;
227
+ int cpumasksize;
228
+
229
+ cpumasksize = uv_cpumask_size();
230
+ if (cpumasksize < 0)
231
+ return cpumasksize;
232
+ if (mask_size < (size_t)cpumasksize)
233
+ return UV_EINVAL;
234
+
235
+ CPU_ZERO(&cpuset);
236
+ #if defined(__ANDROID__)
237
+ if (sched_getaffinity(pthread_gettid_np(*tid), sizeof(cpuset), &cpuset))
238
+ r = errno;
239
+ else
240
+ r = 0;
241
+ #else
242
+ r = pthread_getaffinity_np(*tid, sizeof(cpuset), &cpuset);
243
+ #endif
244
+ if (r)
245
+ return UV__ERR(r);
246
+ for (i = 0; i < cpumasksize; i++)
247
+ cpumask[i] = !!CPU_ISSET(i, &cpuset);
248
+
249
+ return 0;
250
+ }
251
+ #else
252
+ int uv_thread_setaffinity(uv_thread_t* tid,
253
+ char* cpumask,
254
+ char* oldmask,
255
+ size_t mask_size) {
256
+ return UV_ENOTSUP;
257
+ }
258
+
259
+
260
+ int uv_thread_getaffinity(uv_thread_t* tid,
261
+ char* cpumask,
262
+ size_t mask_size) {
263
+ return UV_ENOTSUP;
264
+ }
265
+ #endif /* defined(__linux__) || defined(UV_BSD_H) */
266
+
267
+ int uv_thread_getcpu(void) {
268
+ #if UV__CPU_AFFINITY_SUPPORTED
269
+ int cpu;
270
+
271
+ cpu = sched_getcpu();
272
+ if (cpu < 0)
273
+ return UV__ERR(errno);
274
+
275
+ return cpu;
276
+ #else
277
+ return UV_ENOTSUP;
278
+ #endif
279
+ }
280
+
75
281
  uv_thread_t uv_thread_self(void) {
76
282
  return pthread_self();
77
283
  }
78
284
 
79
285
  int uv_thread_join(uv_thread_t *tid) {
80
- return -pthread_join(*tid, NULL);
286
+ return UV__ERR(pthread_join(*tid, NULL));
81
287
  }
82
288
 
83
289
 
@@ -88,7 +294,7 @@ int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) {
88
294
 
89
295
  int uv_mutex_init(uv_mutex_t* mutex) {
90
296
  #if defined(NDEBUG) || !defined(PTHREAD_MUTEX_ERRORCHECK)
91
- return -pthread_mutex_init(mutex, NULL);
297
+ return UV__ERR(pthread_mutex_init(mutex, NULL));
92
298
  #else
93
299
  pthread_mutexattr_t attr;
94
300
  int err;
@@ -104,11 +310,30 @@ int uv_mutex_init(uv_mutex_t* mutex) {
104
310
  if (pthread_mutexattr_destroy(&attr))
105
311
  abort();
106
312
 
107
- return -err;
313
+ return UV__ERR(err);
108
314
  #endif
109
315
  }
110
316
 
111
317
 
318
+ int uv_mutex_init_recursive(uv_mutex_t* mutex) {
319
+ pthread_mutexattr_t attr;
320
+ int err;
321
+
322
+ if (pthread_mutexattr_init(&attr))
323
+ abort();
324
+
325
+ if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE))
326
+ abort();
327
+
328
+ err = pthread_mutex_init(mutex, &attr);
329
+
330
+ if (pthread_mutexattr_destroy(&attr))
331
+ abort();
332
+
333
+ return UV__ERR(err);
334
+ }
335
+
336
+
112
337
  void uv_mutex_destroy(uv_mutex_t* mutex) {
113
338
  if (pthread_mutex_destroy(mutex))
114
339
  abort();
@@ -128,7 +353,7 @@ int uv_mutex_trylock(uv_mutex_t* mutex) {
128
353
  if (err) {
129
354
  if (err != EBUSY && err != EAGAIN)
130
355
  abort();
131
- return -EBUSY;
356
+ return UV_EBUSY;
132
357
  }
133
358
 
134
359
  return 0;
@@ -142,7 +367,7 @@ void uv_mutex_unlock(uv_mutex_t* mutex) {
142
367
 
143
368
 
144
369
  int uv_rwlock_init(uv_rwlock_t* rwlock) {
145
- return -pthread_rwlock_init(rwlock, NULL);
370
+ return UV__ERR(pthread_rwlock_init(rwlock, NULL));
146
371
  }
147
372
 
148
373
 
@@ -165,7 +390,7 @@ int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) {
165
390
  if (err) {
166
391
  if (err != EBUSY && err != EAGAIN)
167
392
  abort();
168
- return -EBUSY;
393
+ return UV_EBUSY;
169
394
  }
170
395
 
171
396
  return 0;
@@ -191,7 +416,7 @@ int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) {
191
416
  if (err) {
192
417
  if (err != EBUSY && err != EAGAIN)
193
418
  abort();
194
- return -EBUSY;
419
+ return UV_EBUSY;
195
420
  }
196
421
 
197
422
  return 0;
@@ -218,12 +443,12 @@ int uv_sem_init(uv_sem_t* sem, unsigned int value) {
218
443
  if (err == KERN_SUCCESS)
219
444
  return 0;
220
445
  if (err == KERN_INVALID_ARGUMENT)
221
- return -EINVAL;
446
+ return UV_EINVAL;
222
447
  if (err == KERN_RESOURCE_SHORTAGE)
223
- return -ENOMEM;
448
+ return UV_ENOMEM;
224
449
 
225
450
  abort();
226
- return -EINVAL; /* Satisfy the compiler. */
451
+ return UV_EINVAL; /* Satisfy the compiler. */
227
452
  }
228
453
 
229
454
 
@@ -262,34 +487,152 @@ int uv_sem_trywait(uv_sem_t* sem) {
262
487
  if (err == KERN_SUCCESS)
263
488
  return 0;
264
489
  if (err == KERN_OPERATION_TIMED_OUT)
265
- return -EAGAIN;
490
+ return UV_EAGAIN;
266
491
 
267
492
  abort();
268
- return -EINVAL; /* Satisfy the compiler. */
493
+ return UV_EINVAL; /* Satisfy the compiler. */
269
494
  }
270
495
 
271
496
  #else /* !(defined(__APPLE__) && defined(__MACH__)) */
272
497
 
273
- int uv_sem_init(uv_sem_t* sem, unsigned int value) {
498
+ #if defined(__GLIBC__) && !defined(__UCLIBC__)
499
+
500
+ /* Hack around https://sourceware.org/bugzilla/show_bug.cgi?id=12674
501
+ * by providing a custom implementation for glibc < 2.21 in terms of other
502
+ * concurrency primitives.
503
+ * Refs: https://github.com/nodejs/node/issues/19903 */
504
+
505
+ /* To preserve ABI compatibility, we treat the uv_sem_t as storage for
506
+ * a pointer to the actual struct we're using underneath. */
507
+
508
+ static uv_once_t glibc_version_check_once = UV_ONCE_INIT;
509
+ static int platform_needs_custom_semaphore = 0;
510
+
511
+ static void glibc_version_check(void) {
512
+ const char* version = gnu_get_libc_version();
513
+ platform_needs_custom_semaphore =
514
+ version[0] == '2' && version[1] == '.' &&
515
+ atoi(version + 2) < 21;
516
+ }
517
+
518
+ #elif defined(__MVS__)
519
+
520
+ #define platform_needs_custom_semaphore 1
521
+
522
+ #else /* !defined(__GLIBC__) && !defined(__MVS__) */
523
+
524
+ #define platform_needs_custom_semaphore 0
525
+
526
+ #endif
527
+
528
+ typedef struct uv_semaphore_s {
529
+ uv_mutex_t mutex;
530
+ uv_cond_t cond;
531
+ unsigned int value;
532
+ } uv_semaphore_t;
533
+
534
+ #if (defined(__GLIBC__) && !defined(__UCLIBC__)) || \
535
+ platform_needs_custom_semaphore
536
+ STATIC_ASSERT(sizeof(uv_sem_t) >= sizeof(uv_semaphore_t*));
537
+ #endif
538
+
539
+ static int uv__custom_sem_init(uv_sem_t* sem_, unsigned int value) {
540
+ int err;
541
+ uv_semaphore_t* sem;
542
+
543
+ sem = uv__malloc(sizeof(*sem));
544
+ if (sem == NULL)
545
+ return UV_ENOMEM;
546
+
547
+ if ((err = uv_mutex_init(&sem->mutex)) != 0) {
548
+ uv__free(sem);
549
+ return err;
550
+ }
551
+
552
+ if ((err = uv_cond_init(&sem->cond)) != 0) {
553
+ uv_mutex_destroy(&sem->mutex);
554
+ uv__free(sem);
555
+ return err;
556
+ }
557
+
558
+ sem->value = value;
559
+ *(uv_semaphore_t**)sem_ = sem;
560
+ return 0;
561
+ }
562
+
563
+
564
+ static void uv__custom_sem_destroy(uv_sem_t* sem_) {
565
+ uv_semaphore_t* sem;
566
+
567
+ sem = *(uv_semaphore_t**)sem_;
568
+ uv_cond_destroy(&sem->cond);
569
+ uv_mutex_destroy(&sem->mutex);
570
+ uv__free(sem);
571
+ }
572
+
573
+
574
+ static void uv__custom_sem_post(uv_sem_t* sem_) {
575
+ uv_semaphore_t* sem;
576
+
577
+ sem = *(uv_semaphore_t**)sem_;
578
+ uv_mutex_lock(&sem->mutex);
579
+ sem->value++;
580
+ if (sem->value == 1)
581
+ uv_cond_signal(&sem->cond); /* Release one to replace us. */
582
+ uv_mutex_unlock(&sem->mutex);
583
+ }
584
+
585
+
586
+ static void uv__custom_sem_wait(uv_sem_t* sem_) {
587
+ uv_semaphore_t* sem;
588
+
589
+ sem = *(uv_semaphore_t**)sem_;
590
+ uv_mutex_lock(&sem->mutex);
591
+ while (sem->value == 0)
592
+ uv_cond_wait(&sem->cond, &sem->mutex);
593
+ sem->value--;
594
+ uv_mutex_unlock(&sem->mutex);
595
+ }
596
+
597
+
598
+ static int uv__custom_sem_trywait(uv_sem_t* sem_) {
599
+ uv_semaphore_t* sem;
600
+
601
+ sem = *(uv_semaphore_t**)sem_;
602
+ if (uv_mutex_trylock(&sem->mutex) != 0)
603
+ return UV_EAGAIN;
604
+
605
+ if (sem->value == 0) {
606
+ uv_mutex_unlock(&sem->mutex);
607
+ return UV_EAGAIN;
608
+ }
609
+
610
+ sem->value--;
611
+ uv_mutex_unlock(&sem->mutex);
612
+
613
+ return 0;
614
+ }
615
+
616
+ static int uv__sem_init(uv_sem_t* sem, unsigned int value) {
274
617
  if (sem_init(sem, 0, value))
275
- return -errno;
618
+ return UV__ERR(errno);
276
619
  return 0;
277
620
  }
278
621
 
279
622
 
280
- void uv_sem_destroy(uv_sem_t* sem) {
623
+ static void uv__sem_destroy(uv_sem_t* sem) {
281
624
  if (sem_destroy(sem))
282
625
  abort();
283
626
  }
284
627
 
285
628
 
286
- void uv_sem_post(uv_sem_t* sem) {
629
+ static void uv__sem_post(uv_sem_t* sem) {
287
630
  if (sem_post(sem))
288
631
  abort();
289
632
  }
290
633
 
291
634
 
292
- void uv_sem_wait(uv_sem_t* sem) {
635
+ static void uv__sem_wait(uv_sem_t* sem) {
293
636
  int r;
294
637
 
295
638
  do
@@ -301,7 +644,7 @@ void uv_sem_wait(uv_sem_t* sem) {
301
644
  }
302
645
 
303
646
 
304
- int uv_sem_trywait(uv_sem_t* sem) {
647
+ static int uv__sem_trywait(uv_sem_t* sem) {
305
648
  int r;
306
649
 
307
650
  do
@@ -310,20 +653,63 @@ int uv_sem_trywait(uv_sem_t* sem) {
310
653
 
311
654
  if (r) {
312
655
  if (errno == EAGAIN)
313
- return -EAGAIN;
656
+ return UV_EAGAIN;
314
657
  abort();
315
658
  }
316
659
 
317
660
  return 0;
318
661
  }
319
662
 
663
+ int uv_sem_init(uv_sem_t* sem, unsigned int value) {
664
+ #if defined(__GLIBC__) && !defined(__UCLIBC__)
665
+ uv_once(&glibc_version_check_once, glibc_version_check);
666
+ #endif
667
+
668
+ if (platform_needs_custom_semaphore)
669
+ return uv__custom_sem_init(sem, value);
670
+ else
671
+ return uv__sem_init(sem, value);
672
+ }
673
+
674
+
675
+ void uv_sem_destroy(uv_sem_t* sem) {
676
+ if (platform_needs_custom_semaphore)
677
+ uv__custom_sem_destroy(sem);
678
+ else
679
+ uv__sem_destroy(sem);
680
+ }
681
+
682
+
683
+ void uv_sem_post(uv_sem_t* sem) {
684
+ if (platform_needs_custom_semaphore)
685
+ uv__custom_sem_post(sem);
686
+ else
687
+ uv__sem_post(sem);
688
+ }
689
+
690
+
691
+ void uv_sem_wait(uv_sem_t* sem) {
692
+ if (platform_needs_custom_semaphore)
693
+ uv__custom_sem_wait(sem);
694
+ else
695
+ uv__sem_wait(sem);
696
+ }
697
+
698
+
699
+ int uv_sem_trywait(uv_sem_t* sem) {
700
+ if (platform_needs_custom_semaphore)
701
+ return uv__custom_sem_trywait(sem);
702
+ else
703
+ return uv__sem_trywait(sem);
704
+ }
705
+
320
706
  #endif /* defined(__APPLE__) && defined(__MACH__) */
321
707
 
322
708
 
323
- #if defined(__APPLE__) && defined(__MACH__)
709
+ #if defined(__APPLE__) && defined(__MACH__) || defined(__MVS__)
324
710
 
325
711
  int uv_cond_init(uv_cond_t* cond) {
326
- return -pthread_cond_init(cond, NULL);
712
+ return UV__ERR(pthread_cond_init(cond, NULL));
327
713
  }
328
714
 
329
715
  #else /* !(defined(__APPLE__) && defined(__MACH__)) */
@@ -334,13 +720,11 @@ int uv_cond_init(uv_cond_t* cond) {
334
720
 
335
721
  err = pthread_condattr_init(&attr);
336
722
  if (err)
337
- return -err;
723
+ return UV__ERR(err);
338
724
 
339
- #if !(defined(__ANDROID__) && defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
340
725
  err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
341
726
  if (err)
342
727
  goto error2;
343
- #endif
344
728
 
345
729
  err = pthread_cond_init(cond, &attr);
346
730
  if (err)
@@ -356,12 +740,41 @@ error:
356
740
  pthread_cond_destroy(cond);
357
741
  error2:
358
742
  pthread_condattr_destroy(&attr);
359
- return -err;
743
+ return UV__ERR(err);
360
744
  }
361
745
 
362
746
  #endif /* defined(__APPLE__) && defined(__MACH__) */
363
747
 
364
748
  void uv_cond_destroy(uv_cond_t* cond) {
749
+ #if defined(__APPLE__) && defined(__MACH__)
750
+ /* It has been reported that destroying condition variables that have been
751
+ * signalled but not waited on can sometimes result in application crashes.
752
+ * See https://codereview.chromium.org/1323293005.
753
+ */
754
+ pthread_mutex_t mutex;
755
+ struct timespec ts;
756
+ int err;
757
+
758
+ if (pthread_mutex_init(&mutex, NULL))
759
+ abort();
760
+
761
+ if (pthread_mutex_lock(&mutex))
762
+ abort();
763
+
764
+ ts.tv_sec = 0;
765
+ ts.tv_nsec = 1;
766
+
767
+ err = pthread_cond_timedwait_relative_np(cond, &mutex, &ts);
768
+ if (err != 0 && err != ETIMEDOUT)
769
+ abort();
770
+
771
+ if (pthread_mutex_unlock(&mutex))
772
+ abort();
773
+
774
+ if (pthread_mutex_destroy(&mutex))
775
+ abort();
776
+ #endif /* defined(__APPLE__) && defined(__MACH__) */
777
+
365
778
  if (pthread_cond_destroy(cond))
366
779
  abort();
367
780
  }
@@ -376,33 +789,56 @@ void uv_cond_broadcast(uv_cond_t* cond) {
376
789
  abort();
377
790
  }
378
791
 
792
+ #if defined(__APPLE__) && defined(__MACH__)
793
+
794
+ void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
795
+ int r;
796
+
797
+ errno = 0;
798
+ r = pthread_cond_wait(cond, mutex);
799
+
800
+ /* Workaround for a bug in OS X at least up to 13.6
801
+ * See https://github.com/libuv/libuv/issues/4165
802
+ */
803
+ if (r == EINVAL)
804
+ if (errno == EBUSY)
805
+ return;
806
+
807
+ if (r)
808
+ abort();
809
+ }
810
+
811
+ #else /* !(defined(__APPLE__) && defined(__MACH__)) */
812
+
379
813
  void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
380
814
  if (pthread_cond_wait(cond, mutex))
381
815
  abort();
382
816
  }
383
817
 
818
+ #endif
384
819
 
385
820
  int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) {
386
821
  int r;
387
822
  struct timespec ts;
823
+ #if defined(__MVS__)
824
+ struct timeval tv;
825
+ #endif
388
826
 
389
827
  #if defined(__APPLE__) && defined(__MACH__)
390
828
  ts.tv_sec = timeout / NANOSEC;
391
829
  ts.tv_nsec = timeout % NANOSEC;
392
830
  r = pthread_cond_timedwait_relative_np(cond, mutex, &ts);
831
+ #else
832
+ #if defined(__MVS__)
833
+ if (gettimeofday(&tv, NULL))
834
+ abort();
835
+ timeout += tv.tv_sec * NANOSEC + tv.tv_usec * 1e3;
393
836
  #else
394
837
  timeout += uv__hrtime(UV_CLOCK_PRECISE);
838
+ #endif
395
839
  ts.tv_sec = timeout / NANOSEC;
396
840
  ts.tv_nsec = timeout % NANOSEC;
397
- #if defined(__ANDROID__) && defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC)
398
- /*
399
- * The bionic pthread implementation doesn't support CLOCK_MONOTONIC,
400
- * but has this alternative function instead.
401
- */
402
- r = pthread_cond_timedwait_monotonic_np(cond, mutex, &ts);
403
- #else
404
841
  r = pthread_cond_timedwait(cond, mutex, &ts);
405
- #endif /* __ANDROID__ */
406
842
  #endif
407
843
 
408
844
 
@@ -410,101 +846,17 @@ int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) {
410
846
  return 0;
411
847
 
412
848
  if (r == ETIMEDOUT)
413
- return -ETIMEDOUT;
849
+ return UV_ETIMEDOUT;
414
850
 
415
851
  abort();
416
- return -EINVAL; /* Satisfy the compiler. */
417
- }
418
-
419
-
420
- #if defined(__APPLE__) && defined(__MACH__)
421
-
422
- int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) {
423
- int err;
424
-
425
- barrier->n = count;
426
- barrier->count = 0;
427
-
428
- err = uv_mutex_init(&barrier->mutex);
429
- if (err)
430
- return -err;
431
-
432
- err = uv_sem_init(&barrier->turnstile1, 0);
433
- if (err)
434
- goto error2;
435
-
436
- err = uv_sem_init(&barrier->turnstile2, 1);
437
- if (err)
438
- goto error;
439
-
440
- return 0;
441
-
442
- error:
443
- uv_sem_destroy(&barrier->turnstile1);
444
- error2:
445
- uv_mutex_destroy(&barrier->mutex);
446
- return -err;
447
-
448
- }
449
-
450
-
451
- void uv_barrier_destroy(uv_barrier_t* barrier) {
452
- uv_sem_destroy(&barrier->turnstile2);
453
- uv_sem_destroy(&barrier->turnstile1);
454
- uv_mutex_destroy(&barrier->mutex);
455
- }
456
-
457
-
458
- int uv_barrier_wait(uv_barrier_t* barrier) {
459
- int serial_thread;
460
-
461
- uv_mutex_lock(&barrier->mutex);
462
- if (++barrier->count == barrier->n) {
463
- uv_sem_wait(&barrier->turnstile2);
464
- uv_sem_post(&barrier->turnstile1);
465
- }
466
- uv_mutex_unlock(&barrier->mutex);
467
-
468
- uv_sem_wait(&barrier->turnstile1);
469
- uv_sem_post(&barrier->turnstile1);
470
-
471
- uv_mutex_lock(&barrier->mutex);
472
- serial_thread = (--barrier->count == 0);
473
- if (serial_thread) {
474
- uv_sem_wait(&barrier->turnstile1);
475
- uv_sem_post(&barrier->turnstile2);
476
- }
477
- uv_mutex_unlock(&barrier->mutex);
478
-
479
- uv_sem_wait(&barrier->turnstile2);
480
- uv_sem_post(&barrier->turnstile2);
481
- return serial_thread;
482
- }
483
-
484
- #else /* !(defined(__APPLE__) && defined(__MACH__)) */
485
-
486
- int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) {
487
- return -pthread_barrier_init(barrier, NULL, count);
488
- }
489
-
490
-
491
- void uv_barrier_destroy(uv_barrier_t* barrier) {
492
- if (pthread_barrier_destroy(barrier))
493
- abort();
494
- }
495
-
496
-
497
- int uv_barrier_wait(uv_barrier_t* barrier) {
498
- int r = pthread_barrier_wait(barrier);
499
- if (r && r != PTHREAD_BARRIER_SERIAL_THREAD)
500
- abort();
501
- return r == PTHREAD_BARRIER_SERIAL_THREAD;
852
+ #ifndef __SUNPRO_C
853
+ return UV_EINVAL; /* Satisfy the compiler. */
854
+ #endif
502
855
  }
503
856
 
504
- #endif /* defined(__APPLE__) && defined(__MACH__) */
505
857
 
506
858
  int uv_key_create(uv_key_t* key) {
507
- return -pthread_key_create(key, NULL);
859
+ return UV__ERR(pthread_key_create(key, NULL));
508
860
  }
509
861
 
510
862