passenger 2.0.6 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (497) hide show
  1. data/DEVELOPERS.TXT +10 -4
  2. data/LICENSE +1 -1
  3. data/NEWS +0 -0
  4. data/Rakefile +183 -117
  5. data/benchmark/dispatcher.rb +5 -9
  6. data/bin/passenger-install-apache2-module +52 -18
  7. data/bin/passenger-memory-stats +67 -13
  8. data/bin/passenger-spawn-server +8 -4
  9. data/bin/passenger-status +21 -46
  10. data/bin/passenger-stress-test +5 -5
  11. data/debian/postinst +1 -1
  12. data/doc/ApplicationPool algorithm.txt +180 -128
  13. data/doc/Architectural overview.html +1 -778
  14. data/doc/Security of user switching support.html +1 -643
  15. data/doc/Users guide Apache.html +3127 -0
  16. data/doc/Users guide Nginx.html +1458 -0
  17. data/doc/Users guide.html +1404 -467
  18. data/doc/Users guide.txt +843 -105
  19. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +751 -641
  20. data/doc/cxxapi/ApplicationPool_8h-source.html +168 -171
  21. data/doc/cxxapi/Application_8h-source.html +494 -394
  22. data/doc/cxxapi/Bucket_8h-source.html +21 -15
  23. data/doc/cxxapi/CachedFileStat_8h-source.html +191 -0
  24. data/doc/cxxapi/Configuration_8h-source.html +311 -149
  25. data/doc/cxxapi/DirectoryMapper_8h-source.html +309 -0
  26. data/doc/cxxapi/DummySpawnManager_8h-source.html +3 -4
  27. data/doc/cxxapi/Exceptions_8h-source.html +182 -165
  28. data/doc/cxxapi/FileChecker_8h-source.html +130 -0
  29. data/doc/cxxapi/Hooks_8h-source.html +2 -3
  30. data/doc/cxxapi/Logging_8h-source.html +92 -89
  31. data/doc/cxxapi/MessageChannel_8h-source.html +585 -477
  32. data/doc/cxxapi/PoolOptions_8h-source.html +305 -0
  33. data/doc/cxxapi/SpawnManager_8h-source.html +515 -540
  34. data/doc/cxxapi/StandardApplicationPool_8h-source.html +779 -679
  35. data/doc/cxxapi/SystemTime_8h-source.html +104 -0
  36. data/doc/cxxapi/Utils_8h-source.html +331 -227
  37. data/doc/cxxapi/annotated.html +6 -7
  38. data/doc/cxxapi/classClient-members.html +1 -2
  39. data/doc/cxxapi/classClient.html +1 -2
  40. data/doc/cxxapi/classHooks-members.html +5 -2
  41. data/doc/cxxapi/classHooks.html +112 -2
  42. data/doc/cxxapi/classPassenger_1_1Application-members.html +2 -3
  43. data/doc/cxxapi/classPassenger_1_1Application.html +8 -9
  44. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +4 -4
  45. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +42 -81
  46. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +1 -2
  47. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +3 -4
  48. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  49. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +3 -2
  50. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +74 -3
  51. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +1 -2
  52. data/doc/cxxapi/classPassenger_1_1BusyException.html +2 -3
  53. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +1 -2
  54. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +2 -3
  55. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +38 -0
  56. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +256 -0
  57. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +1 -2
  58. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +2 -3
  59. data/doc/cxxapi/{classPassenger_1_1Thread-members.html → classPassenger_1_1FileChecker-members.html} +4 -5
  60. data/doc/cxxapi/classPassenger_1_1FileChecker.html +121 -0
  61. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +1 -2
  62. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +2 -3
  63. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  64. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +2 -3
  65. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +2 -3
  66. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  67. data/doc/cxxapi/classPassenger_1_1IOException-members.html +1 -2
  68. data/doc/cxxapi/classPassenger_1_1IOException.html +2 -3
  69. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  70. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +5 -2
  71. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +155 -5
  72. data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption-members.html → classPassenger_1_1RuntimeException-members.html} +2 -3
  73. data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption.html → classPassenger_1_1RuntimeException.html} +10 -8
  74. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -2
  75. data/doc/cxxapi/classPassenger_1_1SpawnException.html +2 -3
  76. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +2 -3
  77. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +15 -56
  78. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +5 -4
  79. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +20 -81
  80. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  81. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +2 -3
  82. data/doc/cxxapi/classPassenger_1_1SystemException.html +9 -10
  83. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  84. data/doc/cxxapi/{classboost_1_1this__thread_1_1disable__syscall__interruption-members.html → classPassenger_1_1SystemTime-members.html} +5 -3
  85. data/doc/cxxapi/classPassenger_1_1SystemTime.html +86 -0
  86. data/doc/cxxapi/classPassenger_1_1TempFile-members.html +2 -3
  87. data/doc/cxxapi/classPassenger_1_1TempFile.html +17 -9
  88. data/doc/cxxapi/definitions_8h-source.html +1 -2
  89. data/doc/cxxapi/files.html +6 -3
  90. data/doc/cxxapi/functions.html +98 -35
  91. data/doc/cxxapi/functions_func.html +60 -32
  92. data/doc/cxxapi/functions_type.html +1 -2
  93. data/doc/cxxapi/functions_vars.html +27 -2
  94. data/doc/cxxapi/graph_legend.html +1 -2
  95. data/doc/cxxapi/graph_legend.png +0 -0
  96. data/doc/cxxapi/group__Configuration.html +3 -4
  97. data/doc/cxxapi/group__Configuration.png +0 -0
  98. data/doc/cxxapi/group__Core.html +3 -4
  99. data/doc/cxxapi/group__Core.png +0 -0
  100. data/doc/cxxapi/group__Exceptions.html +4 -2
  101. data/doc/cxxapi/group__Hooks.html +1 -6
  102. data/doc/cxxapi/group__Hooks.png +0 -0
  103. data/doc/cxxapi/group__Support.html +259 -36
  104. data/doc/cxxapi/hierarchy.html +6 -7
  105. data/doc/cxxapi/inherit__graph__0.map +1 -1
  106. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  107. data/doc/cxxapi/inherit__graph__0.png +0 -0
  108. data/doc/cxxapi/inherit__graph__1.map +1 -1
  109. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  110. data/doc/cxxapi/inherit__graph__1.png +0 -0
  111. data/doc/cxxapi/inherit__graph__10.map +1 -1
  112. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  113. data/doc/cxxapi/inherit__graph__10.png +0 -0
  114. data/doc/cxxapi/inherit__graph__11.map +1 -1
  115. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  116. data/doc/cxxapi/inherit__graph__11.png +0 -0
  117. data/doc/cxxapi/inherit__graph__12.map +2 -1
  118. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  119. data/doc/cxxapi/inherit__graph__12.png +0 -0
  120. data/doc/cxxapi/inherit__graph__13.map +1 -1
  121. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  122. data/doc/cxxapi/inherit__graph__13.png +0 -0
  123. data/doc/cxxapi/inherit__graph__14.map +1 -2
  124. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  125. data/doc/cxxapi/inherit__graph__14.png +0 -0
  126. data/doc/cxxapi/inherit__graph__15.map +1 -1
  127. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  128. data/doc/cxxapi/inherit__graph__15.png +0 -0
  129. data/doc/cxxapi/inherit__graph__16.map +1 -1
  130. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  131. data/doc/cxxapi/inherit__graph__16.png +0 -0
  132. data/doc/cxxapi/inherit__graph__17.png +0 -0
  133. data/doc/cxxapi/inherit__graph__18.png +0 -0
  134. data/doc/cxxapi/inherit__graph__19.png +0 -0
  135. data/doc/cxxapi/inherit__graph__2.map +1 -1
  136. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  137. data/doc/cxxapi/inherit__graph__2.png +0 -0
  138. data/doc/cxxapi/inherit__graph__20.map +1 -1
  139. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  140. data/doc/cxxapi/inherit__graph__20.png +0 -0
  141. data/doc/cxxapi/inherit__graph__21.map +1 -1
  142. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  143. data/doc/cxxapi/inherit__graph__21.png +0 -0
  144. data/doc/cxxapi/inherit__graph__3.map +1 -1
  145. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  146. data/doc/cxxapi/inherit__graph__3.png +0 -0
  147. data/doc/cxxapi/inherit__graph__4.map +1 -1
  148. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  149. data/doc/cxxapi/inherit__graph__4.png +0 -0
  150. data/doc/cxxapi/inherit__graph__5.map +2 -1
  151. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  152. data/doc/cxxapi/inherit__graph__5.png +0 -0
  153. data/doc/cxxapi/inherit__graph__6.map +1 -1
  154. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  155. data/doc/cxxapi/inherit__graph__6.png +0 -0
  156. data/doc/cxxapi/inherit__graph__7.map +1 -1
  157. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  158. data/doc/cxxapi/inherit__graph__7.png +0 -0
  159. data/doc/cxxapi/inherit__graph__8.map +1 -1
  160. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  161. data/doc/cxxapi/inherit__graph__8.png +0 -0
  162. data/doc/cxxapi/inherit__graph__9.map +1 -2
  163. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  164. data/doc/cxxapi/inherit__graph__9.png +0 -0
  165. data/doc/cxxapi/inherits.html +30 -31
  166. data/doc/cxxapi/main.html +1 -2
  167. data/doc/cxxapi/modules.html +1 -2
  168. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +1 -2
  169. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +2 -3
  170. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +1 -2
  171. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +2 -3
  172. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +49 -0
  173. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +404 -0
  174. data/doc/cxxapi/tree.html +18 -20
  175. data/doc/images/conservative_spawning.png +0 -0
  176. data/doc/images/conservative_spawning.svg +248 -0
  177. data/doc/images/smart-lv2.png +0 -0
  178. data/doc/images/smart-lv2.svg +320 -0
  179. data/doc/rdoc/classes/ConditionVariable.html +68 -34
  180. data/doc/rdoc/classes/Exception.html +16 -16
  181. data/doc/rdoc/classes/GC.html +9 -9
  182. data/doc/rdoc/classes/IO.html +36 -17
  183. data/doc/rdoc/classes/PhusionPassenger.html +183 -0
  184. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +511 -0
  185. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer.html +285 -242
  186. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerAlreadyStarted.html +3 -3
  187. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerError.html +3 -3
  188. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerNotStarted.html +3 -3
  189. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/UnknownMessage.html +3 -3
  190. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
  191. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
  192. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +247 -0
  193. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
  194. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AppInitError.html +36 -19
  195. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/Application.html +81 -96
  196. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/ConsoleTextTemplate.html +18 -18
  197. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/FrameworkInitError.html +20 -18
  198. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/HTMLTemplate.html +18 -18
  199. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/InitializationError.html +9 -9
  200. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  201. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/MessageChannel.html +93 -92
  202. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/NativeSupport.html +55 -25
  203. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  204. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +185 -0
  205. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +182 -0
  206. data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
  207. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +424 -0
  208. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
  209. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
  210. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +444 -0
  211. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
  212. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +154 -0
  213. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +408 -0
  214. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/UnknownError.html +13 -13
  215. data/doc/rdoc/classes/PhusionPassenger/Utils.html +687 -0
  216. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/VersionNotFound.html +8 -8
  217. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  218. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
  219. data/doc/rdoc/classes/PlatformInfo.html +663 -159
  220. data/doc/rdoc/classes/RakeExtensions.html +4 -4
  221. data/doc/rdoc/classes/Signal.html +134 -0
  222. data/doc/rdoc/created.rid +1 -1
  223. data/doc/rdoc/files/DEVELOPERS_TXT.html +15 -10
  224. data/doc/rdoc/files/README.html +5 -7
  225. data/doc/rdoc/files/ext/{passenger → phusion_passenger}/native_support_c.html +2 -2
  226. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_request_handler_rb.html +7 -9
  227. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +120 -0
  228. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_server_rb.html +7 -10
  229. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +99 -0
  230. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +92 -0
  231. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/application_rb.html +6 -8
  232. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/console_text_template_rb.html +5 -7
  233. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/constants_rb.html +4 -5
  234. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/dependencies_rb.html +6 -8
  235. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +116 -0
  236. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/exceptions_rb.html +5 -7
  237. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/html_template_rb.html +5 -7
  238. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/message_channel_rb.html +5 -7
  239. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/platform_info_rb.html +6 -7
  240. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +123 -0
  241. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +117 -0
  242. data/doc/rdoc/files/lib/{passenger/utils_rb.html → phusion_passenger/railz/application_spawner_rb.html} +24 -17
  243. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
  244. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +139 -0
  245. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +118 -0
  246. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/simple_benchmarking_rb.html +5 -7
  247. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/spawn_manager_rb.html +40 -24
  248. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +169 -0
  249. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +120 -0
  250. data/doc/rdoc/files/lib/rake/extensions_rb.html +3 -4
  251. data/doc/rdoc/fr_class_index.html +37 -19
  252. data/doc/rdoc/fr_file_index.html +25 -14
  253. data/doc/rdoc/fr_method_index.html +145 -74
  254. data/ext/apache2/Application.h +145 -44
  255. data/ext/apache2/ApplicationPool.h +27 -29
  256. data/ext/apache2/ApplicationPoolServer.h +183 -72
  257. data/ext/apache2/ApplicationPoolServerExecutable.cpp +249 -42
  258. data/ext/apache2/Bucket.cpp +61 -9
  259. data/ext/apache2/Bucket.h +15 -8
  260. data/ext/apache2/CachedFileStat.cpp +114 -0
  261. data/ext/apache2/CachedFileStat.h +169 -0
  262. data/ext/apache2/Configuration.cpp +213 -22
  263. data/ext/apache2/Configuration.h +176 -13
  264. data/ext/apache2/DirectoryMapper.h +287 -0
  265. data/ext/apache2/Exceptions.h +30 -12
  266. data/ext/apache2/FileChecker.h +108 -0
  267. data/ext/apache2/Hooks.cpp +709 -493
  268. data/ext/apache2/LICENSE-CNRI.TXT +15 -0
  269. data/ext/apache2/Logging.h +26 -22
  270. data/ext/apache2/MessageChannel.h +124 -15
  271. data/ext/apache2/PoolOptions.h +283 -0
  272. data/ext/apache2/SpawnManager.h +75 -99
  273. data/ext/apache2/StandardApplicationPool.h +296 -195
  274. data/ext/apache2/SystemTime.cpp +28 -0
  275. data/ext/apache2/SystemTime.h +82 -0
  276. data/ext/apache2/Utils.cpp +172 -18
  277. data/ext/apache2/Utils.h +124 -19
  278. data/ext/boost/cstdint.hpp +4 -2
  279. data/ext/boost/current_function.hpp +67 -0
  280. data/ext/boost/detail/sp_counted_base.hpp +4 -4
  281. data/ext/boost/thread/exceptions.hpp +2 -1
  282. data/ext/boost/thread/pthread/thread.hpp +11 -3
  283. data/ext/boost/thread/pthread/thread_data.hpp +2 -1
  284. data/ext/oxt/backtrace.cpp +172 -0
  285. data/ext/oxt/backtrace.hpp +135 -0
  286. data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
  287. data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
  288. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
  289. data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
  290. data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
  291. data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
  292. data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
  293. data/ext/oxt/macros.hpp +58 -0
  294. data/ext/oxt/spin_lock.hpp +55 -0
  295. data/ext/{apache2/System.cpp → oxt/system_calls.cpp} +87 -52
  296. data/ext/oxt/system_calls.hpp +234 -0
  297. data/ext/oxt/thread.cpp +32 -0
  298. data/ext/oxt/thread.hpp +223 -0
  299. data/ext/oxt/tracable_exception.cpp +87 -0
  300. data/ext/oxt/tracable_exception.hpp +35 -0
  301. data/{lib/passenger/constants.rb → ext/phusion_passenger/extconf.rb} +14 -9
  302. data/ext/{passenger → phusion_passenger}/native_support.c +33 -6
  303. data/lib/{passenger → phusion_passenger}/abstract_request_handler.rb +209 -93
  304. data/lib/{passenger → phusion_passenger}/abstract_server.rb +23 -8
  305. data/lib/phusion_passenger/abstract_server_collection.rb +301 -0
  306. data/lib/phusion_passenger/admin_tools.rb +25 -0
  307. data/lib/phusion_passenger/admin_tools/control_process.rb +107 -0
  308. data/lib/{passenger → phusion_passenger}/application.rb +13 -16
  309. data/lib/{passenger → phusion_passenger}/console_text_template.rb +2 -2
  310. data/{ext/passenger/extconf.rb → lib/phusion_passenger/constants.rb} +5 -5
  311. data/lib/{passenger → phusion_passenger}/dependencies.rb +38 -32
  312. data/lib/phusion_passenger/events.rb +45 -0
  313. data/lib/{passenger → phusion_passenger}/exceptions.rb +12 -5
  314. data/lib/{passenger → phusion_passenger}/html_template.rb +2 -2
  315. data/lib/{passenger → phusion_passenger}/message_channel.rb +3 -2
  316. data/lib/phusion_passenger/platform_info.rb +500 -0
  317. data/lib/{passenger → phusion_passenger}/rack/application_spawner.rb +29 -22
  318. data/lib/{passenger → phusion_passenger}/rack/request_handler.rb +14 -9
  319. data/lib/{passenger → phusion_passenger}/railz/application_spawner.rb +94 -74
  320. data/lib/{passenger → phusion_passenger}/railz/cgi_fixed.rb +2 -2
  321. data/lib/{passenger → phusion_passenger}/railz/framework_spawner.rb +86 -98
  322. data/lib/{passenger → phusion_passenger}/railz/request_handler.rb +6 -6
  323. data/lib/{passenger → phusion_passenger}/simple_benchmarking.rb +0 -0
  324. data/lib/{passenger → phusion_passenger}/spawn_manager.rb +136 -128
  325. data/lib/{passenger → phusion_passenger}/templates/apache2_config_snippets.txt.erb +0 -0
  326. data/lib/{passenger → phusion_passenger}/templates/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
  327. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
  328. data/lib/{passenger → phusion_passenger}/templates/app_init_error.html.erb +0 -0
  329. data/lib/{passenger → phusion_passenger}/templates/database_error.html.erb +0 -0
  330. data/lib/{passenger → phusion_passenger}/templates/deployment_example.txt.erb +1 -1
  331. data/lib/{passenger → phusion_passenger}/templates/error_layout.css +0 -0
  332. data/lib/{passenger → phusion_passenger}/templates/error_layout.html.erb +0 -0
  333. data/lib/{passenger → phusion_passenger}/templates/framework_init_error.html.erb +0 -0
  334. data/lib/{passenger → phusion_passenger}/templates/general_error.html.erb +0 -0
  335. data/lib/{passenger → phusion_passenger}/templates/invalid_app_root.html.erb +1 -1
  336. data/lib/{passenger → phusion_passenger}/templates/load_error.html.erb +0 -0
  337. data/lib/{passenger → phusion_passenger}/templates/no_write_permission_to_passenger_root.txt.erb +0 -0
  338. data/lib/{passenger → phusion_passenger}/templates/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  339. data/lib/{passenger → phusion_passenger}/templates/run_installer_as_root.txt.erb +0 -0
  340. data/lib/{passenger → phusion_passenger}/templates/version_not_found.html.erb +0 -0
  341. data/lib/{passenger → phusion_passenger}/templates/welcome.txt.erb +0 -0
  342. data/lib/{passenger → phusion_passenger}/utils.rb +210 -44
  343. data/lib/{passenger → phusion_passenger}/wsgi/application_spawner.rb +18 -15
  344. data/lib/{passenger → phusion_passenger}/wsgi/request_handler.py +7 -1
  345. data/man/passenger-memory-stats.8 +1 -1
  346. data/misc/render_error_pages.rb +1 -1
  347. data/test/ApplicationPoolServerTest.cpp +0 -28
  348. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +4 -0
  349. data/test/ApplicationPoolTest.cpp +307 -69
  350. data/test/CachedFileStatTest.cpp +262 -0
  351. data/test/FileCheckerTest.cpp +79 -0
  352. data/test/MessageChannelTest.cpp +3 -3
  353. data/test/PoolOptionsTest.cpp +37 -0
  354. data/test/SpawnManagerTest.cpp +4 -4
  355. data/test/StandardApplicationPoolTest.cpp +4 -0
  356. data/test/SystemTimeTest.cpp +37 -0
  357. data/test/UtilsTest.cpp +137 -0
  358. data/test/integration_tests.rb +270 -23
  359. data/test/oxt/backtrace_test.cpp +128 -0
  360. data/test/oxt/oxt_test_main.cpp +25 -0
  361. data/test/oxt/syscall_interruption_test.cpp +50 -0
  362. data/test/ruby/abstract_request_handler_spec.rb +83 -0
  363. data/test/ruby/abstract_server_collection_spec.rb +246 -0
  364. data/test/ruby/application_spec.rb +3 -3
  365. data/test/ruby/message_channel_spec.rb +2 -2
  366. data/test/ruby/rack/application_spawner_spec.rb +3 -5
  367. data/test/ruby/rails/application_spawner_spec.rb +54 -15
  368. data/test/ruby/rails/framework_spawner_spec.rb +6 -8
  369. data/test/ruby/rails/minimal_spawner_spec.rb +29 -0
  370. data/test/ruby/rails/spawner_error_handling_spec.rb +1 -1
  371. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +3 -3
  372. data/test/ruby/spawn_manager_spec.rb +23 -12
  373. data/test/ruby/utils_spec.rb +36 -2
  374. data/test/ruby/wsgi/application_spawner_spec.rb +47 -0
  375. data/test/stub/apache2/httpd.conf.erb +3 -5
  376. data/test/stub/message_channel.rb +2 -2
  377. data/test/stub/message_channel_2.rb +2 -2
  378. data/test/stub/message_channel_3.rb +3 -3
  379. data/test/stub/minimal-railsapp/README +0 -0
  380. data/test/stub/minimal-railsapp/config/application.rb +0 -0
  381. data/test/stub/minimal-railsapp/config/environment.rb +0 -0
  382. data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
  383. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +0 -0
  384. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
  385. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
  386. data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
  387. data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
  388. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +0 -0
  389. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  390. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
  391. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +0 -0
  392. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +0 -0
  393. data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +8 -0
  394. data/test/stub/rails_apps/foobar/config/environments/development.rb +1 -2
  395. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +21 -1
  396. data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
  397. data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
  398. data/test/stub/railsapp/app/controllers/application.rb +0 -0
  399. data/test/stub/railsapp/app/controllers/bar_controller_1.rb +0 -0
  400. data/test/stub/railsapp/app/controllers/bar_controller_2.rb +1 -1
  401. data/test/stub/railsapp/app/controllers/foo_controller.rb +4 -0
  402. data/test/stub/railsapp/app/helpers/application_helper.rb +0 -0
  403. data/test/stub/railsapp/config/boot.rb +0 -0
  404. data/test/stub/railsapp/config/database.yml +0 -0
  405. data/test/stub/railsapp/config/environment.rb +0 -0
  406. data/test/stub/railsapp/config/environments/development.rb +0 -0
  407. data/test/stub/railsapp/config/environments/production.rb +0 -0
  408. data/test/stub/railsapp/config/initializers/inflections.rb +0 -0
  409. data/test/stub/railsapp/config/initializers/mime_types.rb +0 -0
  410. data/test/stub/railsapp/config/routes.rb +0 -0
  411. data/test/stub/railsapp/public/useless.txt +0 -0
  412. data/test/stub/spawn_server.rb +3 -4
  413. data/test/stub/wsgi/passenger_wsgi.pyc +0 -0
  414. data/test/support/apache2_controller.rb +57 -7
  415. data/test/support/tut.h +15 -0
  416. data/vendor/README +12 -0
  417. data/vendor/README_FOR_PACKAGERS +1 -0
  418. data/vendor/rack-0.9.1/AUTHORS +8 -0
  419. data/vendor/rack-0.9.1/COPYING +18 -0
  420. data/vendor/rack-0.9.1/ChangeLog +1423 -0
  421. data/vendor/rack-0.9.1/KNOWN-ISSUES +18 -0
  422. data/vendor/rack-0.9.1/README +306 -0
  423. data/vendor/rack-0.9.1/Rakefile +188 -0
  424. data/vendor/rack-0.9.1/SPEC +129 -0
  425. data/vendor/rack-0.9.1/lib/rack.rb +86 -0
  426. data/vendor/rack-0.9.1/lib/rack/adapter/camping.rb +22 -0
  427. data/vendor/rack-0.9.1/lib/rack/auth/abstract/handler.rb +28 -0
  428. data/vendor/rack-0.9.1/lib/rack/auth/abstract/request.rb +37 -0
  429. data/vendor/rack-0.9.1/lib/rack/auth/basic.rb +58 -0
  430. data/vendor/rack-0.9.1/lib/rack/auth/digest/md5.rb +124 -0
  431. data/vendor/rack-0.9.1/lib/rack/auth/digest/nonce.rb +51 -0
  432. data/vendor/rack-0.9.1/lib/rack/auth/digest/params.rb +55 -0
  433. data/vendor/rack-0.9.1/lib/rack/auth/digest/request.rb +40 -0
  434. data/vendor/rack-0.9.1/lib/rack/auth/openid.rb +438 -0
  435. data/vendor/rack-0.9.1/lib/rack/builder.rb +67 -0
  436. data/vendor/rack-0.9.1/lib/rack/cascade.rb +36 -0
  437. data/vendor/rack-0.9.1/lib/rack/commonlogger.rb +61 -0
  438. data/vendor/rack-0.9.1/lib/rack/conditionalget.rb +43 -0
  439. data/vendor/rack-0.9.1/lib/rack/content_length.rb +25 -0
  440. data/vendor/rack-0.9.1/lib/rack/deflater.rb +87 -0
  441. data/vendor/rack-0.9.1/lib/rack/directory.rb +150 -0
  442. data/vendor/rack-0.9.1/lib/rack/file.rb +85 -0
  443. data/vendor/rack-0.9.1/lib/rack/handler.rb +48 -0
  444. data/vendor/rack-0.9.1/lib/rack/handler/cgi.rb +57 -0
  445. data/vendor/rack-0.9.1/lib/rack/handler/evented_mongrel.rb +8 -0
  446. data/vendor/rack-0.9.1/lib/rack/handler/fastcgi.rb +86 -0
  447. data/vendor/rack-0.9.1/lib/rack/handler/lsws.rb +52 -0
  448. data/vendor/rack-0.9.1/lib/rack/handler/mongrel.rb +82 -0
  449. data/vendor/rack-0.9.1/lib/rack/handler/scgi.rb +57 -0
  450. data/vendor/rack-0.9.1/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  451. data/vendor/rack-0.9.1/lib/rack/handler/thin.rb +15 -0
  452. data/vendor/rack-0.9.1/lib/rack/handler/webrick.rb +61 -0
  453. data/vendor/rack-0.9.1/lib/rack/head.rb +19 -0
  454. data/vendor/rack-0.9.1/lib/rack/lint.rb +465 -0
  455. data/vendor/rack-0.9.1/lib/rack/lobster.rb +65 -0
  456. data/vendor/rack-0.9.1/lib/rack/methodoverride.rb +27 -0
  457. data/vendor/rack-0.9.1/lib/rack/mime.rb +204 -0
  458. data/vendor/rack-0.9.1/lib/rack/mock.rb +160 -0
  459. data/vendor/rack-0.9.1/lib/rack/recursive.rb +57 -0
  460. data/vendor/rack-0.9.1/lib/rack/reloader.rb +64 -0
  461. data/vendor/rack-0.9.1/lib/rack/request.rb +218 -0
  462. data/vendor/rack-0.9.1/lib/rack/response.rb +171 -0
  463. data/vendor/rack-0.9.1/lib/rack/session/abstract/id.rb +153 -0
  464. data/vendor/rack-0.9.1/lib/rack/session/cookie.rb +89 -0
  465. data/vendor/rack-0.9.1/lib/rack/session/memcache.rb +97 -0
  466. data/vendor/rack-0.9.1/lib/rack/session/pool.rb +73 -0
  467. data/vendor/rack-0.9.1/lib/rack/showexceptions.rb +348 -0
  468. data/vendor/rack-0.9.1/lib/rack/showstatus.rb +106 -0
  469. data/vendor/rack-0.9.1/lib/rack/static.rb +38 -0
  470. data/vendor/rack-0.9.1/lib/rack/urlmap.rb +48 -0
  471. data/vendor/rack-0.9.1/lib/rack/utils.rb +347 -0
  472. metadata +1197 -1055
  473. data/doc/cxxapi/System_8h-source.html +0 -251
  474. data/doc/cxxapi/classDirectoryMapper-members.html +0 -38
  475. data/doc/cxxapi/classDirectoryMapper.html +0 -203
  476. data/doc/cxxapi/classPassenger_1_1Thread.html +0 -100
  477. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption.html +0 -46
  478. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption-members.html +0 -33
  479. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption.html +0 -44
  480. data/doc/cxxapi/namespacePassenger.html +0 -208
  481. data/doc/cxxapi/namespacePassenger_1_1InterruptableCalls.html +0 -43
  482. data/doc/cxxapi/namespacemembers.html +0 -70
  483. data/doc/cxxapi/namespacemembers_func.html +0 -66
  484. data/doc/cxxapi/namespacemembers_type.html +0 -46
  485. data/doc/cxxapi/namespaces.html +0 -35
  486. data/doc/rdoc/classes/Passenger.html +0 -136
  487. data/doc/rdoc/classes/Passenger/AbstractRequestHandler.html +0 -402
  488. data/doc/rdoc/classes/Passenger/SpawnManager.html +0 -379
  489. data/doc/rdoc/classes/Passenger/Utils.html +0 -578
  490. data/ext/apache2/System.h +0 -228
  491. data/lib/passenger/platform_info.rb +0 -302
  492. data/lib/passenger/templates/app_exited_during_initialization.html.erb +0 -19
  493. data/test/stub/apache2/httpd.conf +0 -75
  494. data/test/stub/rails_apps/foobar/config/environments/test.rb +0 -22
  495. data/test/stub/rails_apps/mycook/config/environments/test.rb +0 -22
  496. data/test/stub/railsapp/config/environments/test.rb +0 -22
  497. data/test/stub/railsapp2/config/environments/test.rb +0 -22
@@ -1,251 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: System.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li><a href="annotated.html"><span>Classes</span></a></li>
15
- <li class="current"><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <h1>System.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
19
- <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
20
- <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
21
- <a name="l00004"></a>00004 <span class="comment"> *</span>
22
- <a name="l00005"></a>00005 <span class="comment"> * Phusion Passenger is a trademark of Hongli Lai &amp; Ninh Bui.</span>
23
- <a name="l00006"></a>00006 <span class="comment"> *</span>
24
- <a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
25
- <a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
26
- <a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; version 2 of the License.</span>
27
- <a name="l00010"></a>00010 <span class="comment"> *</span>
28
- <a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
29
- <a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
30
- <a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
31
- <a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
32
- <a name="l00015"></a>00015 <span class="comment"> *</span>
33
- <a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License along</span>
34
- <a name="l00017"></a>00017 <span class="comment"> * with this program; if not, write to the Free Software Foundation, Inc.,</span>
35
- <a name="l00018"></a>00018 <span class="comment"> * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
36
- <a name="l00019"></a>00019 <span class="comment"> */</span>
37
- <a name="l00020"></a>00020 <span class="preprocessor">#ifndef _PASSENGER_SYSTEM_H_</span>
38
- <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_SYSTEM_H_</span>
39
- <a name="l00022"></a>00022 <span class="preprocessor"></span>
40
- <a name="l00023"></a>00023 <span class="preprocessor">#include &lt;boost/thread.hpp&gt;</span>
41
- <a name="l00024"></a>00024 <span class="preprocessor">#include &lt;boost/date_time/posix_time/posix_time_types.hpp&gt;</span>
42
- <a name="l00025"></a>00025 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
43
- <a name="l00026"></a>00026 <span class="preprocessor">#include &lt;sys/wait.h&gt;</span>
44
- <a name="l00027"></a>00027 <span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
45
- <a name="l00028"></a>00028 <span class="preprocessor">#include &lt;pthread.h&gt;</span>
46
- <a name="l00029"></a>00029 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
47
- <a name="l00030"></a>00030 <span class="preprocessor">#include &lt;signal.h&gt;</span>
48
- <a name="l00031"></a>00031 <span class="preprocessor">#include &lt;cstdio&gt;</span>
49
- <a name="l00032"></a>00032 <span class="preprocessor">#include &lt;ctime&gt;</span>
50
- <a name="l00033"></a>00033 <span class="preprocessor">#include &lt;cassert&gt;</span>
51
- <a name="l00034"></a>00034 <span class="comment"></span>
52
- <a name="l00035"></a>00035 <span class="comment">/**</span>
53
- <a name="l00036"></a>00036 <span class="comment"> * Support for interruption of blocking system calls and C library calls.</span>
54
- <a name="l00037"></a>00037 <span class="comment"> *</span>
55
- <a name="l00038"></a>00038 <span class="comment"> * This file provides a framework for writing multithreading code that can</span>
56
- <a name="l00039"></a>00039 <span class="comment"> * be interrupted, even when blocked on system calls or C library calls.</span>
57
- <a name="l00040"></a>00040 <span class="comment"> *</span>
58
- <a name="l00041"></a>00041 <span class="comment"> * One must first call Passenger::setupSysCallInterruptionSupport().</span>
59
- <a name="l00042"></a>00042 <span class="comment"> * Then one may use the functions in Passenger::InterruptableCalls</span>
60
- <a name="l00043"></a>00043 <span class="comment"> * as drop-in replacements for system calls or C library functions.</span>
61
- <a name="l00044"></a>00044 <span class="comment"> * Thread::interrupt() and Thread::interruptAndJoin() should be used</span>
62
- <a name="l00045"></a>00045 <span class="comment"> * for interrupting threads.</span>
63
- <a name="l00046"></a>00046 <span class="comment"> *</span>
64
- <a name="l00047"></a>00047 <span class="comment"> * By default, interruptions are caught.</span>
65
- <a name="l00048"></a>00048 <span class="comment"> */</span>
66
- <a name="l00049"></a>00049
67
- <a name="l00050"></a>00050 <span class="comment">// This is one of the things that Java is good at and C++ sucks at. Sigh...</span>
68
- <a name="l00051"></a>00051
69
- <a name="l00052"></a>00052 <span class="keyword">namespace </span>Passenger {
70
- <a name="l00053"></a>00053
71
- <a name="l00054"></a>00054 <span class="keyword">using namespace </span>boost;
72
- <a name="l00055"></a>00055
73
- <a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> INTERRUPTION_SIGNAL = SIGINT;
74
- <a name="l00057"></a>00057 <span class="comment"></span>
75
- <a name="l00058"></a>00058 <span class="comment"> /**</span>
76
- <a name="l00059"></a>00059 <span class="comment"> * Setup system call interruption support.</span>
77
- <a name="l00060"></a>00060 <span class="comment"> * This function may only be called once. It installs a signal handler</span>
78
- <a name="l00061"></a>00061 <span class="comment"> * for INTERRUPTION_SIGNAL, so one should not install a different signal</span>
79
- <a name="l00062"></a>00062 <span class="comment"> * handler for that signal after calling this function.</span>
80
- <a name="l00063"></a>00063 <span class="comment"> */</span>
81
- <a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="namespacePassenger.html#453b743532b8c3b9877fe2fadb031501" title="Setup system call interruption support.">setupSyscallInterruptionSupport</a>();
82
- <a name="l00065"></a>00065 <span class="comment"></span>
83
- <a name="l00066"></a>00066 <span class="comment"> /**</span>
84
- <a name="l00067"></a>00067 <span class="comment"> * Thread class with system call interruption support.</span>
85
- <a name="l00068"></a>00068 <span class="comment"> */</span>
86
- <a name="l00069"></a><a class="code" href="classPassenger_1_1Thread.html">00069</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1Thread.html" title="Thread class with system call interruption support.">Thread</a>: <span class="keyword">public</span> thread {
87
- <a name="l00070"></a>00070 <span class="keyword">public</span>:
88
- <a name="l00071"></a>00071 <span class="keyword">template</span> &lt;<span class="keyword">class</span> F&gt;
89
- <a name="l00072"></a>00072 <span class="keyword">explicit</span> <a class="code" href="classPassenger_1_1Thread.html" title="Thread class with system call interruption support.">Thread</a>(F f, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stackSize = 0)
90
- <a name="l00073"></a>00073 : thread(f, stackSize) {}
91
- <a name="l00074"></a>00074 <span class="comment"></span>
92
- <a name="l00075"></a>00075 <span class="comment"> /**</span>
93
- <a name="l00076"></a>00076 <span class="comment"> * Interrupt the thread. This method behaves just like</span>
94
- <a name="l00077"></a>00077 <span class="comment"> * boost::thread::interrupt(), but will also respect the interruption</span>
95
- <a name="l00078"></a>00078 <span class="comment"> * points defined in Passenger::InterruptableCalls.</span>
96
- <a name="l00079"></a>00079 <span class="comment"> *</span>
97
- <a name="l00080"></a>00080 <span class="comment"> * Note that an interruption request may get lost, depending on the</span>
98
- <a name="l00081"></a>00081 <span class="comment"> * current execution point of the thread. Thus, one should call this</span>
99
- <a name="l00082"></a>00082 <span class="comment"> * method in a loop, until a certain goal condition has been fulfilled.</span>
100
- <a name="l00083"></a>00083 <span class="comment"> * interruptAndJoin() is a convenience method that implements this</span>
101
- <a name="l00084"></a>00084 <span class="comment"> * pattern.</span>
102
- <a name="l00085"></a>00085 <span class="comment"> */</span>
103
- <a name="l00086"></a><a class="code" href="classPassenger_1_1Thread.html#2212f1aee683798318ec2bcd57550407">00086</a> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Thread.html#2212f1aee683798318ec2bcd57550407" title="Interrupt the thread.">interrupt</a>() {
104
- <a name="l00087"></a>00087 <span class="keywordtype">int</span> ret;
105
- <a name="l00088"></a>00088
106
- <a name="l00089"></a>00089 thread::interrupt();
107
- <a name="l00090"></a>00090 <span class="keywordflow">do</span> {
108
- <a name="l00091"></a>00091 ret = pthread_kill(native_handle(),
109
- <a name="l00092"></a>00092 INTERRUPTION_SIGNAL);
110
- <a name="l00093"></a>00093 } <span class="keywordflow">while</span> (ret == EINTR);
111
- <a name="l00094"></a>00094 }
112
- <a name="l00095"></a>00095 <span class="comment"></span>
113
- <a name="l00096"></a>00096 <span class="comment"> /**</span>
114
- <a name="l00097"></a>00097 <span class="comment"> * Keep interrupting the thread until it's done, then join it.</span>
115
- <a name="l00098"></a>00098 <span class="comment"> *</span>
116
- <a name="l00099"></a>00099 <span class="comment"> * @throws boost::thread_interrupted</span>
117
- <a name="l00100"></a>00100 <span class="comment"> */</span>
118
- <a name="l00101"></a><a class="code" href="classPassenger_1_1Thread.html#5bc65d2722d1425e574b3b8a97e60388">00101</a> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Thread.html#5bc65d2722d1425e574b3b8a97e60388" title="Keep interrupting the thread until it&amp;#39;s done, then join it.">interruptAndJoin</a>() {
119
- <a name="l00102"></a>00102 <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;
120
- <a name="l00103"></a>00103 <span class="keywordflow">while</span> (!done) {
121
- <a name="l00104"></a>00104 <a class="code" href="classPassenger_1_1Thread.html#2212f1aee683798318ec2bcd57550407" title="Interrupt the thread.">interrupt</a>();
122
- <a name="l00105"></a>00105 done = timed_join(posix_time::millisec(10));
123
- <a name="l00106"></a>00106 }
124
- <a name="l00107"></a>00107 }
125
- <a name="l00108"></a>00108 };
126
- <a name="l00109"></a>00109 <span class="comment"></span>
127
- <a name="l00110"></a>00110 <span class="comment"> /**</span>
128
- <a name="l00111"></a>00111 <span class="comment"> * System call and C library call wrappers with interruption support.</span>
129
- <a name="l00112"></a>00112 <span class="comment"> * These functions are interruption points, i.e. they throw boost::thread_interrupted</span>
130
- <a name="l00113"></a>00113 <span class="comment"> * whenever the calling thread is interrupted by Thread::interrupt() or</span>
131
- <a name="l00114"></a>00114 <span class="comment"> * Thread::interruptAndJoin().</span>
132
- <a name="l00115"></a>00115 <span class="comment"> */</span>
133
- <a name="l00116"></a><a class="code" href="namespacePassenger_1_1InterruptableCalls.html">00116</a> <span class="keyword">namespace </span>InterruptableCalls {
134
- <a name="l00117"></a>00117 ssize_t read(<span class="keywordtype">int</span> fd, <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> count);
135
- <a name="l00118"></a>00118 ssize_t write(<span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> count);
136
- <a name="l00119"></a>00119 <span class="keywordtype">int</span> close(<span class="keywordtype">int</span> fd);
137
- <a name="l00120"></a>00120
138
- <a name="l00121"></a>00121 <span class="keywordtype">int</span> socketpair(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> protocol, <span class="keywordtype">int</span> sv[2]);
139
- <a name="l00122"></a>00122 ssize_t recvmsg(<span class="keywordtype">int</span> s, <span class="keyword">struct</span> msghdr *msg, <span class="keywordtype">int</span> flags);
140
- <a name="l00123"></a>00123 ssize_t sendmsg(<span class="keywordtype">int</span> s, <span class="keyword">const</span> <span class="keyword">struct</span> msghdr *msg, <span class="keywordtype">int</span> flags);
141
- <a name="l00124"></a>00124 <span class="keywordtype">int</span> shutdown(<span class="keywordtype">int</span> s, <span class="keywordtype">int</span> how);
142
- <a name="l00125"></a>00125
143
- <a name="l00126"></a>00126 FILE *fopen(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <span class="keyword">const</span> <span class="keywordtype">char</span> *mode);
144
- <a name="l00127"></a>00127 <span class="keywordtype">int</span> fclose(FILE *fp);
145
- <a name="l00128"></a>00128
146
- <a name="l00129"></a>00129 time_t time(time_t *t);
147
- <a name="l00130"></a>00130 <span class="keywordtype">int</span> usleep(useconds_t usec);
148
- <a name="l00131"></a>00131 <span class="keywordtype">int</span> nanosleep(<span class="keyword">const</span> <span class="keyword">struct</span> timespec *req, <span class="keyword">struct</span> timespec *rem);
149
- <a name="l00132"></a>00132
150
- <a name="l00133"></a>00133 pid_t fork();
151
- <a name="l00134"></a>00134 <span class="keywordtype">int</span> kill(pid_t pid, <span class="keywordtype">int</span> sig);
152
- <a name="l00135"></a>00135 pid_t waitpid(pid_t pid, <span class="keywordtype">int</span> *status, <span class="keywordtype">int</span> options);
153
- <a name="l00136"></a>00136 }
154
- <a name="l00137"></a>00137
155
- <a name="l00138"></a>00138 } <span class="comment">// namespace Passenger</span>
156
- <a name="l00139"></a>00139
157
- <a name="l00140"></a>00140 <span class="keyword">namespace </span>boost {
158
- <a name="l00141"></a>00141 <span class="keyword">namespace </span>this_thread {
159
- <a name="l00142"></a>00142 <span class="comment"></span>
160
- <a name="l00143"></a>00143 <span class="comment"> /**</span>
161
- <a name="l00144"></a>00144 <span class="comment"> * @intern</span>
162
- <a name="l00145"></a>00145 <span class="comment"> */</span>
163
- <a name="l00146"></a>00146 <span class="keyword">extern</span> thread_specific_ptr&lt;bool&gt; _syscalls_interruptable;
164
- <a name="l00147"></a>00147 <span class="comment"></span>
165
- <a name="l00148"></a>00148 <span class="comment"> /**</span>
166
- <a name="l00149"></a>00149 <span class="comment"> * Check whether system calls should be interruptable in</span>
167
- <a name="l00150"></a>00150 <span class="comment"> * the calling thread.</span>
168
- <a name="l00151"></a>00151 <span class="comment"> */</span>
169
- <a name="l00152"></a>00152 <span class="keywordtype">bool</span> syscalls_interruptable();
170
- <a name="l00153"></a>00153
171
- <a name="l00154"></a>00154 <span class="keyword">class </span>restore_syscall_interruption;
172
- <a name="l00155"></a>00155 <span class="comment"></span>
173
- <a name="l00156"></a>00156 <span class="comment"> /**</span>
174
- <a name="l00157"></a>00157 <span class="comment"> * Create this struct on the stack to temporarily enable system</span>
175
- <a name="l00158"></a>00158 <span class="comment"> * call interruption, until the object goes out of scope.</span>
176
- <a name="l00159"></a>00159 <span class="comment"> */</span>
177
- <a name="l00160"></a><a class="code" href="classboost_1_1this__thread_1_1enable__syscall__interruption.html">00160</a> <span class="keyword">class </span><a class="code" href="classboost_1_1this__thread_1_1enable__syscall__interruption.html" title="Create this struct on the stack to temporarily enable system call interruption, until...">enable_syscall_interruption</a> {
178
- <a name="l00161"></a>00161 <span class="keyword">private</span>:
179
- <a name="l00162"></a>00162 <span class="keywordtype">bool</span> lastValue;
180
- <a name="l00163"></a>00163 <span class="keyword">public</span>:
181
- <a name="l00164"></a>00164 <a class="code" href="classboost_1_1this__thread_1_1enable__syscall__interruption.html" title="Create this struct on the stack to temporarily enable system call interruption, until...">enable_syscall_interruption</a>() {
182
- <a name="l00165"></a>00165 <span class="keywordflow">if</span> (_syscalls_interruptable.get() == NULL) {
183
- <a name="l00166"></a>00166 lastValue = <span class="keyword">true</span>;
184
- <a name="l00167"></a>00167 _syscalls_interruptable.reset(<span class="keyword">new</span> <span class="keywordtype">bool</span>(<span class="keyword">true</span>));
185
- <a name="l00168"></a>00168 } <span class="keywordflow">else</span> {
186
- <a name="l00169"></a>00169 lastValue = *_syscalls_interruptable;
187
- <a name="l00170"></a>00170 *_syscalls_interruptable = <span class="keyword">true</span>;
188
- <a name="l00171"></a>00171 }
189
- <a name="l00172"></a>00172 }
190
- <a name="l00173"></a>00173
191
- <a name="l00174"></a>00174 ~<a class="code" href="classboost_1_1this__thread_1_1enable__syscall__interruption.html" title="Create this struct on the stack to temporarily enable system call interruption, until...">enable_syscall_interruption</a>() {
192
- <a name="l00175"></a>00175 *_syscalls_interruptable = lastValue;
193
- <a name="l00176"></a>00176 }
194
- <a name="l00177"></a>00177 };
195
- <a name="l00178"></a>00178 <span class="comment"></span>
196
- <a name="l00179"></a>00179 <span class="comment"> /**</span>
197
- <a name="l00180"></a>00180 <span class="comment"> * Create this struct on the stack to temporarily disable system</span>
198
- <a name="l00181"></a>00181 <span class="comment"> * call interruption, until the object goes out of scope.</span>
199
- <a name="l00182"></a>00182 <span class="comment"> * While system call interruption is disabled, the functions in</span>
200
- <a name="l00183"></a>00183 <span class="comment"> * InterruptableCalls will try until the return code is not EINTR.</span>
201
- <a name="l00184"></a>00184 <span class="comment"> */</span>
202
- <a name="l00185"></a><a class="code" href="classboost_1_1this__thread_1_1disable__syscall__interruption.html">00185</a> <span class="keyword">class </span><a class="code" href="classboost_1_1this__thread_1_1disable__syscall__interruption.html" title="Create this struct on the stack to temporarily disable system call interruption,...">disable_syscall_interruption</a> {
203
- <a name="l00186"></a>00186 <span class="keyword">private</span>:
204
- <a name="l00187"></a>00187 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classboost_1_1this__thread_1_1restore__syscall__interruption.html" title="Creating an object of this class on the stack will restore the system call interruption...">restore_syscall_interruption</a>;
205
- <a name="l00188"></a>00188 <span class="keywordtype">bool</span> lastValue;
206
- <a name="l00189"></a>00189 <span class="keyword">public</span>:
207
- <a name="l00190"></a>00190 <a class="code" href="classboost_1_1this__thread_1_1disable__syscall__interruption.html" title="Create this struct on the stack to temporarily disable system call interruption,...">disable_syscall_interruption</a>() {
208
- <a name="l00191"></a>00191 <span class="keywordflow">if</span> (_syscalls_interruptable.get() == NULL) {
209
- <a name="l00192"></a>00192 lastValue = <span class="keyword">true</span>;
210
- <a name="l00193"></a>00193 _syscalls_interruptable.reset(<span class="keyword">new</span> <span class="keywordtype">bool</span>(<span class="keyword">false</span>));
211
- <a name="l00194"></a>00194 } <span class="keywordflow">else</span> {
212
- <a name="l00195"></a>00195 lastValue = *_syscalls_interruptable;
213
- <a name="l00196"></a>00196 *_syscalls_interruptable = <span class="keyword">false</span>;
214
- <a name="l00197"></a>00197 }
215
- <a name="l00198"></a>00198 }
216
- <a name="l00199"></a>00199
217
- <a name="l00200"></a>00200 ~<a class="code" href="classboost_1_1this__thread_1_1disable__syscall__interruption.html" title="Create this struct on the stack to temporarily disable system call interruption,...">disable_syscall_interruption</a>() {
218
- <a name="l00201"></a>00201 *_syscalls_interruptable = lastValue;
219
- <a name="l00202"></a>00202 }
220
- <a name="l00203"></a>00203 };
221
- <a name="l00204"></a>00204 <span class="comment"></span>
222
- <a name="l00205"></a>00205 <span class="comment"> /**</span>
223
- <a name="l00206"></a>00206 <span class="comment"> * Creating an object of this class on the stack will restore the</span>
224
- <a name="l00207"></a>00207 <span class="comment"> * system call interruption state to what it was before.</span>
225
- <a name="l00208"></a>00208 <span class="comment"> */</span>
226
- <a name="l00209"></a><a class="code" href="classboost_1_1this__thread_1_1restore__syscall__interruption.html">00209</a> <span class="keyword">class </span><a class="code" href="classboost_1_1this__thread_1_1restore__syscall__interruption.html" title="Creating an object of this class on the stack will restore the system call interruption...">restore_syscall_interruption</a> {
227
- <a name="l00210"></a>00210 <span class="keyword">private</span>:
228
- <a name="l00211"></a>00211 <span class="keywordtype">int</span> lastValue;
229
- <a name="l00212"></a>00212 <span class="keyword">public</span>:
230
- <a name="l00213"></a>00213 <a class="code" href="classboost_1_1this__thread_1_1restore__syscall__interruption.html" title="Creating an object of this class on the stack will restore the system call interruption...">restore_syscall_interruption</a>(<span class="keyword">const</span> <a class="code" href="classboost_1_1this__thread_1_1disable__syscall__interruption.html" title="Create this struct on the stack to temporarily disable system call interruption,...">disable_syscall_interruption</a> &amp;intr) {
231
- <a name="l00214"></a>00214 assert(_syscalls_interruptable.get() != NULL);
232
- <a name="l00215"></a>00215 lastValue = *_syscalls_interruptable;
233
- <a name="l00216"></a>00216 *_syscalls_interruptable = intr.<a class="code" href="classboost_1_1this__thread_1_1disable__syscall__interruption.html#5bc5102c673ea10cc22b93b2eb365a5d">lastValue</a>;
234
- <a name="l00217"></a>00217 }
235
- <a name="l00218"></a>00218
236
- <a name="l00219"></a>00219 ~<a class="code" href="classboost_1_1this__thread_1_1restore__syscall__interruption.html" title="Creating an object of this class on the stack will restore the system call interruption...">restore_syscall_interruption</a>() {
237
- <a name="l00220"></a>00220 *_syscalls_interruptable = lastValue;
238
- <a name="l00221"></a>00221 }
239
- <a name="l00222"></a>00222 };
240
- <a name="l00223"></a>00223
241
- <a name="l00224"></a>00224 } <span class="comment">// namespace this_thread</span>
242
- <a name="l00225"></a>00225 } <span class="comment">// namespace boost</span>
243
- <a name="l00226"></a>00226
244
- <a name="l00227"></a>00227 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_SYSTEM_H_ */</span>
245
- <a name="l00228"></a>00228
246
- </pre></div></div>
247
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:24 2008 for Passenger by&nbsp;
248
- <a href="http://www.doxygen.org/index.html">
249
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
250
- </body>
251
- </html>
@@ -1,38 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: Member List</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
- <li><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <div class="tabs">
19
- <ul>
20
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
- </ul>
24
- </div>
25
- </div>
26
- <div class="contents">
27
- <h1>DirectoryMapper Member List</h1>This is the complete list of members for <a class="el" href="classDirectoryMapper.html">DirectoryMapper</a>, including all inherited members.<p><table>
28
- <tr class="memlist"><td><a class="el" href="classDirectoryMapper.html#6e817b7dd49e6598e1d22f6ee8e44407">DirectoryMapper</a>(request_rec *r, DirConfig *config)</td><td><a class="el" href="classDirectoryMapper.html">DirectoryMapper</a></td><td><code> [inline]</code></td></tr>
29
- <tr class="memlist"><td><a class="el" href="classDirectoryMapper.html#6498662c737db056cd79d7faa0fa71cf">getApplicationType</a>()</td><td><a class="el" href="classDirectoryMapper.html">DirectoryMapper</a></td><td><code> [inline]</code></td></tr>
30
- <tr class="memlist"><td><a class="el" href="classDirectoryMapper.html#a5da2372a06eb92f78e55e5ab2f104ef">getApplicationTypeString</a>()</td><td><a class="el" href="classDirectoryMapper.html">DirectoryMapper</a></td><td><code> [inline]</code></td></tr>
31
- <tr class="memlist"><td><a class="el" href="classDirectoryMapper.html#920caeb4d562d900b30119a2aae25574">getBaseURI</a>()</td><td><a class="el" href="classDirectoryMapper.html">DirectoryMapper</a></td><td><code> [inline]</code></td></tr>
32
- <tr class="memlist"><td><a class="el" href="classDirectoryMapper.html#b05bbc3bd6ebbe64c00712c6a98f9fb8">getPublicDirectory</a>()</td><td><a class="el" href="classDirectoryMapper.html">DirectoryMapper</a></td><td><code> [inline]</code></td></tr>
33
- </table></div>
34
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
35
- <a href="http://www.doxygen.org/index.html">
36
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
37
- </body>
38
- </html>
@@ -1,203 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: DirectoryMapper Class Reference</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
- <li><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <div class="tabs">
19
- <ul>
20
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
- </ul>
24
- </div>
25
- </div>
26
- <div class="contents">
27
- <h1>DirectoryMapper Class Reference<br>
28
- <small>
29
- [<a class="el" href="group__Core.html">Core Apache-related classes and functions</a>]</small>
30
- </h1><!-- doxytag: class="DirectoryMapper" -->
31
- <p>
32
- <a href="classDirectoryMapper-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
33
- Utility class for determining URI-to-Rails/Rack directory mappings.
34
- <p>
35
- Given a URI, it will determine whether that URI belongs to a Rails/Rack application, what the base URI of that application is, and what the associated 'public' directory is.<p>
36
- <dl class="note" compact><dt><b>Note:</b></dt><dd>This class is not thread-safe, but is reentrant. </dd></dl>
37
- <table border="0" cellpadding="0" cellspacing="0">
38
- <tr><td></td></tr>
39
- <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
40
- <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDirectoryMapper.html#6e817b7dd49e6598e1d22f6ee8e44407">DirectoryMapper</a> (request_rec *r, DirConfig *config)</td></tr>
41
-
42
- <tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDirectoryMapper.html#920caeb4d562d900b30119a2aae25574">getBaseURI</a> ()</td></tr>
43
-
44
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine whether the given HTTP request falls under one of the specified RailsBaseURIs or RackBaseURIs. <a href="#920caeb4d562d900b30119a2aae25574"></a><br></td></tr>
45
- <tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDirectoryMapper.html#b05bbc3bd6ebbe64c00712c6a98f9fb8">getPublicDirectory</a> ()</td></tr>
46
-
47
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the filename of the 'public' directory of the Rails/Rack application that's associated with the HTTP request. <a href="#b05bbc3bd6ebbe64c00712c6a98f9fb8"></a><br></td></tr>
48
- <tr><td class="memItemLeft" nowrap align="right" valign="top">ApplicationType&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDirectoryMapper.html#6498662c737db056cd79d7faa0fa71cf">getApplicationType</a> ()</td></tr>
49
-
50
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the application type that's associated with the HTTP request. <a href="#6498662c737db056cd79d7faa0fa71cf"></a><br></td></tr>
51
- <tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDirectoryMapper.html#a5da2372a06eb92f78e55e5ab2f104ef">getApplicationTypeString</a> ()</td></tr>
52
-
53
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the application type (as a string) that's associated with the HTTP request. <a href="#a5da2372a06eb92f78e55e5ab2f104ef"></a><br></td></tr>
54
- </table>
55
- <hr><h2>Constructor &amp; Destructor Documentation</h2>
56
- <a class="anchor" name="6e817b7dd49e6598e1d22f6ee8e44407"></a><!-- doxytag: member="DirectoryMapper::DirectoryMapper" ref="6e817b7dd49e6598e1d22f6ee8e44407" args="(request_rec *r, DirConfig *config)" -->
57
- <div class="memitem">
58
- <div class="memproto">
59
- <table class="memname">
60
- <tr>
61
- <td class="memname">DirectoryMapper::DirectoryMapper </td>
62
- <td>(</td>
63
- <td class="paramtype">request_rec *&nbsp;</td>
64
- <td class="paramname"> <em>r</em>, </td>
65
- </tr>
66
- <tr>
67
- <td class="paramkey"></td>
68
- <td></td>
69
- <td class="paramtype">DirConfig *&nbsp;</td>
70
- <td class="paramname"> <em>config</em></td><td>&nbsp;</td>
71
- </tr>
72
- <tr>
73
- <td></td>
74
- <td>)</td>
75
- <td></td><td></td><td width="100%"><code> [inline]</code></td>
76
- </tr>
77
- </table>
78
- </div>
79
- <div class="memdoc">
80
-
81
- <p>
82
- <dl class="warning" compact><dt><b>Warning:</b></dt><dd>Do not use this object after the destruction of <code>r</code> or <code>config</code>. </dd></dl>
83
-
84
- </div>
85
- </div><p>
86
- <hr><h2>Member Function Documentation</h2>
87
- <a class="anchor" name="920caeb4d562d900b30119a2aae25574"></a><!-- doxytag: member="DirectoryMapper::getBaseURI" ref="920caeb4d562d900b30119a2aae25574" args="()" -->
88
- <div class="memitem">
89
- <div class="memproto">
90
- <table class="memname">
91
- <tr>
92
- <td class="memname">const char* DirectoryMapper::getBaseURI </td>
93
- <td>(</td>
94
- <td class="paramname"> </td>
95
- <td>&nbsp;)&nbsp;</td>
96
- <td width="100%"><code> [inline]</code></td>
97
- </tr>
98
- </table>
99
- </div>
100
- <div class="memdoc">
101
-
102
- <p>
103
- Determine whether the given HTTP request falls under one of the specified RailsBaseURIs or RackBaseURIs.
104
- <p>
105
- If yes, then the first matching base URI will be returned.<p>
106
- If Rails/Rack autodetection was enabled in the configuration, and the document root seems to be a valid Rails/Rack 'public' folder, then this method will return "/".<p>
107
- Otherwise, NULL will be returned.<p>
108
- <dl compact><dt><b>Exceptions:</b></dt><dd>
109
- <table border="0" cellspacing="2" cellpadding="0">
110
- <tr><td valign="top"></td><td valign="top"><em>SystemException</em>&nbsp;</td><td>An error occured while examening the filesystem. </td></tr>
111
- </table>
112
- </dl>
113
- <dl class="warning" compact><dt><b>Warning:</b></dt><dd>The return value may only be used as long as <code>config</code> hasn't been destroyed. </dd></dl>
114
-
115
- </div>
116
- </div><p>
117
- <a class="anchor" name="b05bbc3bd6ebbe64c00712c6a98f9fb8"></a><!-- doxytag: member="DirectoryMapper::getPublicDirectory" ref="b05bbc3bd6ebbe64c00712c6a98f9fb8" args="()" -->
118
- <div class="memitem">
119
- <div class="memproto">
120
- <table class="memname">
121
- <tr>
122
- <td class="memname">string DirectoryMapper::getPublicDirectory </td>
123
- <td>(</td>
124
- <td class="paramname"> </td>
125
- <td>&nbsp;)&nbsp;</td>
126
- <td width="100%"><code> [inline]</code></td>
127
- </tr>
128
- </table>
129
- </div>
130
- <div class="memdoc">
131
-
132
- <p>
133
- Returns the filename of the 'public' directory of the Rails/Rack application that's associated with the HTTP request.
134
- <p>
135
- Returns an empty string if the document root of the HTTP request cannot be determined, or if it isn't a valid folder.<p>
136
- <dl compact><dt><b>Exceptions:</b></dt><dd>
137
- <table border="0" cellspacing="2" cellpadding="0">
138
- <tr><td valign="top"></td><td valign="top"><em>SystemException</em>&nbsp;</td><td>An error occured while examening the filesystem. </td></tr>
139
- </table>
140
- </dl>
141
-
142
- </div>
143
- </div><p>
144
- <a class="anchor" name="6498662c737db056cd79d7faa0fa71cf"></a><!-- doxytag: member="DirectoryMapper::getApplicationType" ref="6498662c737db056cd79d7faa0fa71cf" args="()" -->
145
- <div class="memitem">
146
- <div class="memproto">
147
- <table class="memname">
148
- <tr>
149
- <td class="memname">ApplicationType DirectoryMapper::getApplicationType </td>
150
- <td>(</td>
151
- <td class="paramname"> </td>
152
- <td>&nbsp;)&nbsp;</td>
153
- <td width="100%"><code> [inline]</code></td>
154
- </tr>
155
- </table>
156
- </div>
157
- <div class="memdoc">
158
-
159
- <p>
160
- Returns the application type that's associated with the HTTP request.
161
- <p>
162
- <dl compact><dt><b>Exceptions:</b></dt><dd>
163
- <table border="0" cellspacing="2" cellpadding="0">
164
- <tr><td valign="top"></td><td valign="top"><em>SystemException</em>&nbsp;</td><td>An error occured while examening the filesystem. </td></tr>
165
- </table>
166
- </dl>
167
-
168
- </div>
169
- </div><p>
170
- <a class="anchor" name="a5da2372a06eb92f78e55e5ab2f104ef"></a><!-- doxytag: member="DirectoryMapper::getApplicationTypeString" ref="a5da2372a06eb92f78e55e5ab2f104ef" args="()" -->
171
- <div class="memitem">
172
- <div class="memproto">
173
- <table class="memname">
174
- <tr>
175
- <td class="memname">const char* DirectoryMapper::getApplicationTypeString </td>
176
- <td>(</td>
177
- <td class="paramname"> </td>
178
- <td>&nbsp;)&nbsp;</td>
179
- <td width="100%"><code> [inline]</code></td>
180
- </tr>
181
- </table>
182
- </div>
183
- <div class="memdoc">
184
-
185
- <p>
186
- Returns the application type (as a string) that's associated with the HTTP request.
187
- <p>
188
- <dl compact><dt><b>Exceptions:</b></dt><dd>
189
- <table border="0" cellspacing="2" cellpadding="0">
190
- <tr><td valign="top"></td><td valign="top"><em>SystemException</em>&nbsp;</td><td>An error occured while examening the filesystem. </td></tr>
191
- </table>
192
- </dl>
193
-
194
- </div>
195
- </div><p>
196
- <hr>The documentation for this class was generated from the following file:<ul>
197
- <li>Hooks.cpp</ul>
198
- </div>
199
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
200
- <a href="http://www.doxygen.org/index.html">
201
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
202
- </body>
203
- </html>