passenger 1.0.5 → 2.0.1

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 (2123) hide show
  1. data/DEVELOPERS.TXT +33 -2
  2. data/INSTALL +4 -2
  3. data/LICENSE +11 -10
  4. data/README +23 -4
  5. data/Rakefile +179 -54
  6. data/benchmark/ApplicationPool.cpp +52 -0
  7. data/bin/passenger-config +18 -0
  8. data/bin/passenger-install-apache2-module +79 -14
  9. data/bin/passenger-make-enterprisey +14 -2
  10. data/bin/passenger-memory-stats +25 -2
  11. data/bin/passenger-spawn-server +20 -5
  12. data/bin/passenger-status +96 -0
  13. data/bin/passenger-stress-test +339 -0
  14. data/debian/compat +1 -0
  15. data/debian/control +21 -0
  16. data/debian/postinst +24 -0
  17. data/debian/prerm +2 -0
  18. data/doc/ApplicationPool algorithm.txt +66 -32
  19. data/doc/Architectural overview.html +1 -1
  20. data/doc/Security of user switching support.html +1 -1
  21. data/doc/Users guide.html +867 -243
  22. data/doc/Users guide.txt +830 -191
  23. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +655 -524
  24. data/doc/cxxapi/ApplicationPool_8h-source.html +196 -173
  25. data/doc/cxxapi/Application_8h-source.html +430 -384
  26. data/doc/cxxapi/Configuration_8h-source.html +167 -132
  27. data/doc/cxxapi/DummySpawnManager_8h-source.html +110 -105
  28. data/doc/cxxapi/Exceptions_8h-source.html +229 -173
  29. data/doc/cxxapi/Hooks_8h-source.html +49 -44
  30. data/doc/cxxapi/Logging_8h-source.html +121 -88
  31. data/doc/cxxapi/MessageChannel_8h-source.html +501 -482
  32. data/doc/cxxapi/SpawnManager_8h-source.html +559 -518
  33. data/doc/cxxapi/StandardApplicationPool_8h-source.html +696 -537
  34. data/doc/cxxapi/System_8h-source.html +251 -0
  35. data/doc/cxxapi/Utils_8h-source.html +270 -163
  36. data/doc/cxxapi/annotated.html +40 -24
  37. data/doc/cxxapi/classClient-members.html +22 -17
  38. data/doc/cxxapi/classClient.html +22 -17
  39. data/doc/cxxapi/classDirectoryMapper-members.html +38 -0
  40. data/doc/cxxapi/classDirectoryMapper.html +203 -0
  41. data/doc/cxxapi/classHooks-members.html +33 -0
  42. data/doc/cxxapi/classHooks.html +43 -0
  43. data/doc/cxxapi/classPassenger_1_1Application-members.html +22 -17
  44. data/doc/cxxapi/classPassenger_1_1Application.html +38 -33
  45. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +24 -18
  46. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +94 -35
  47. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +23 -18
  48. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +53 -44
  49. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +1 -1
  50. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +1 -1
  51. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  52. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +28 -21
  53. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +91 -56
  54. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +33 -0
  55. data/doc/cxxapi/classPassenger_1_1BusyException.html +47 -0
  56. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +22 -17
  57. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +25 -22
  58. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +22 -17
  59. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +27 -22
  60. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +22 -17
  61. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +25 -20
  62. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +1 -1
  63. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +1 -1
  64. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  65. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +38 -0
  66. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +61 -0
  67. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.map +1 -0
  68. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.md5 +1 -0
  69. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  70. data/doc/cxxapi/classPassenger_1_1IOException-members.html +22 -17
  71. data/doc/cxxapi/classPassenger_1_1IOException.html +26 -21
  72. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +1 -1
  73. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -1
  74. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  75. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +22 -17
  76. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +44 -21
  77. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +22 -17
  78. data/doc/cxxapi/classPassenger_1_1SpawnException.html +26 -23
  79. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +24 -19
  80. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +64 -43
  81. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +26 -19
  82. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +89 -37
  83. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +1 -1
  84. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +1 -1
  85. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  86. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +22 -17
  87. data/doc/cxxapi/classPassenger_1_1SystemException.html +32 -22
  88. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +1 -0
  89. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +1 -0
  90. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  91. data/doc/cxxapi/classPassenger_1_1TempFile-members.html +36 -0
  92. data/doc/cxxapi/classPassenger_1_1TempFile.html +128 -0
  93. data/doc/cxxapi/classPassenger_1_1Thread-members.html +35 -0
  94. data/doc/cxxapi/classPassenger_1_1Thread.html +100 -0
  95. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption-members.html +33 -0
  96. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption.html +46 -0
  97. data/doc/cxxapi/classboost_1_1this__thread_1_1enable__syscall__interruption-members.html +33 -0
  98. data/doc/cxxapi/classboost_1_1this__thread_1_1enable__syscall__interruption.html +44 -0
  99. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption-members.html +33 -0
  100. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption.html +44 -0
  101. data/doc/cxxapi/definitions_8h-source.html +14 -11
  102. data/doc/cxxapi/doxygen.css +152 -77
  103. data/doc/cxxapi/files.html +18 -12
  104. data/doc/cxxapi/functions.html +107 -55
  105. data/doc/cxxapi/functions_func.html +104 -55
  106. data/doc/cxxapi/functions_type.html +30 -24
  107. data/doc/cxxapi/functions_vars.html +48 -0
  108. data/doc/cxxapi/graph_legend.dot +19 -19
  109. data/doc/cxxapi/graph_legend.html +15 -10
  110. data/doc/cxxapi/graph_legend.png +0 -0
  111. data/doc/cxxapi/group__Configuration.html +18 -13
  112. data/doc/cxxapi/group__Configuration.png +0 -0
  113. data/doc/cxxapi/group__Core.html +23 -11
  114. data/doc/cxxapi/group__Core.png +0 -0
  115. data/doc/cxxapi/group__Exceptions.html +21 -10
  116. data/doc/cxxapi/group__Hooks.html +16 -11
  117. data/doc/cxxapi/group__Hooks.png +0 -0
  118. data/doc/cxxapi/group__Support.html +169 -21
  119. data/doc/cxxapi/hierarchy.html +38 -22
  120. data/doc/cxxapi/index.html +1 -1
  121. data/doc/cxxapi/inherit__graph__0.map +1 -1
  122. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  123. data/doc/cxxapi/inherit__graph__0.png +0 -0
  124. data/doc/cxxapi/inherit__graph__1.map +1 -1
  125. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  126. data/doc/cxxapi/inherit__graph__1.png +0 -0
  127. data/doc/cxxapi/inherit__graph__10.map +1 -1
  128. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  129. data/doc/cxxapi/inherit__graph__10.png +0 -0
  130. data/doc/cxxapi/inherit__graph__11.map +1 -0
  131. data/doc/cxxapi/inherit__graph__11.md5 +1 -0
  132. data/doc/cxxapi/inherit__graph__11.png +0 -0
  133. data/doc/cxxapi/inherit__graph__12.map +1 -0
  134. data/doc/cxxapi/inherit__graph__12.md5 +1 -0
  135. data/doc/cxxapi/inherit__graph__12.png +0 -0
  136. data/doc/cxxapi/inherit__graph__13.map +1 -0
  137. data/doc/cxxapi/inherit__graph__13.md5 +1 -0
  138. data/doc/cxxapi/inherit__graph__13.png +0 -0
  139. data/doc/cxxapi/inherit__graph__14.map +2 -0
  140. data/doc/cxxapi/inherit__graph__14.md5 +1 -0
  141. data/doc/cxxapi/inherit__graph__14.png +0 -0
  142. data/doc/cxxapi/inherit__graph__15.map +1 -0
  143. data/doc/cxxapi/inherit__graph__15.md5 +1 -0
  144. data/doc/cxxapi/inherit__graph__15.png +0 -0
  145. data/doc/cxxapi/inherit__graph__16.map +1 -0
  146. data/doc/cxxapi/inherit__graph__16.md5 +1 -0
  147. data/doc/cxxapi/inherit__graph__16.png +0 -0
  148. data/doc/cxxapi/inherit__graph__17.map +1 -0
  149. data/doc/cxxapi/inherit__graph__17.md5 +1 -0
  150. data/doc/cxxapi/inherit__graph__17.png +0 -0
  151. data/doc/cxxapi/inherit__graph__2.map +1 -1
  152. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  153. data/doc/cxxapi/inherit__graph__2.png +0 -0
  154. data/doc/cxxapi/inherit__graph__3.map +1 -1
  155. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  156. data/doc/cxxapi/inherit__graph__3.png +0 -0
  157. data/doc/cxxapi/inherit__graph__4.map +1 -2
  158. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  159. data/doc/cxxapi/inherit__graph__4.png +0 -0
  160. data/doc/cxxapi/inherit__graph__5.map +1 -1
  161. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  162. data/doc/cxxapi/inherit__graph__5.png +0 -0
  163. data/doc/cxxapi/inherit__graph__6.map +1 -1
  164. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  165. data/doc/cxxapi/inherit__graph__6.png +0 -0
  166. data/doc/cxxapi/inherit__graph__7.map +1 -5
  167. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  168. data/doc/cxxapi/inherit__graph__7.png +0 -0
  169. data/doc/cxxapi/inherit__graph__8.map +1 -1
  170. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  171. data/doc/cxxapi/inherit__graph__8.png +0 -0
  172. data/doc/cxxapi/inherit__graph__9.map +2 -1
  173. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  174. data/doc/cxxapi/inherit__graph__9.png +0 -0
  175. data/doc/cxxapi/inherits.html +80 -39
  176. data/doc/cxxapi/main.html +15 -10
  177. data/doc/cxxapi/modules.html +16 -11
  178. data/doc/cxxapi/namespacePassenger.html +208 -0
  179. data/doc/cxxapi/namespacePassenger_1_1InterruptableCalls.html +43 -0
  180. data/doc/cxxapi/namespacemembers.html +70 -0
  181. data/doc/cxxapi/namespacemembers_func.html +66 -0
  182. data/doc/cxxapi/namespacemembers_type.html +46 -0
  183. data/doc/cxxapi/namespaces.html +35 -0
  184. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +22 -17
  185. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +24 -19
  186. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +23 -18
  187. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +27 -22
  188. data/doc/cxxapi/tabs.css +1 -1
  189. data/doc/cxxapi/tree.html +41 -13
  190. data/doc/rdoc/classes/ConditionVariable.html +25 -23
  191. data/doc/rdoc/classes/Exception.html +11 -11
  192. data/doc/rdoc/classes/GC.html +4 -4
  193. data/doc/rdoc/classes/IO.html +8 -8
  194. data/doc/rdoc/classes/Passenger.html +27 -8
  195. data/doc/rdoc/classes/Passenger/AbstractRequestHandler.html +401 -0
  196. data/doc/rdoc/classes/Passenger/AbstractServer.html +248 -208
  197. data/doc/rdoc/classes/Passenger/AppInitError.html +37 -6
  198. data/doc/rdoc/classes/Passenger/Application.html +73 -74
  199. data/doc/rdoc/classes/Passenger/ConsoleTextTemplate.html +35 -35
  200. data/doc/rdoc/classes/Passenger/FrameworkInitError.html +17 -18
  201. data/doc/rdoc/classes/Passenger/HTMLTemplate.html +30 -30
  202. data/doc/rdoc/classes/Passenger/InitializationError.html +11 -11
  203. data/doc/rdoc/classes/Passenger/MessageChannel.html +138 -138
  204. data/doc/rdoc/classes/Passenger/SpawnManager.html +142 -145
  205. data/doc/rdoc/classes/Passenger/UnknownError.html +11 -11
  206. data/doc/rdoc/classes/Passenger/Utils.html +327 -99
  207. data/doc/rdoc/classes/Passenger/VersionNotFound.html +6 -6
  208. data/doc/rdoc/classes/PlatformInfo.html +10 -10
  209. data/doc/rdoc/created.rid +1 -1
  210. data/doc/rdoc/files/DEVELOPERS_TXT.html +55 -3
  211. data/doc/rdoc/files/README.html +35 -5
  212. data/doc/rdoc/files/ext/passenger/native_support_c.html +1 -1
  213. data/doc/rdoc/files/lib/passenger/abstract_request_handler_rb.html +125 -0
  214. data/doc/rdoc/files/lib/passenger/abstract_server_rb.html +7 -1
  215. data/doc/rdoc/files/lib/passenger/application_rb.html +6 -2
  216. data/doc/rdoc/files/lib/passenger/console_text_template_rb.html +5 -1
  217. data/doc/rdoc/files/lib/passenger/constants_rb.html +114 -0
  218. data/doc/rdoc/files/lib/passenger/dependencies_rb.html +7 -1
  219. data/doc/rdoc/files/lib/passenger/exceptions_rb.html +118 -0
  220. data/doc/rdoc/files/lib/passenger/html_template_rb.html +5 -1
  221. data/doc/rdoc/files/lib/passenger/message_channel_rb.html +5 -5
  222. data/doc/rdoc/files/lib/passenger/platform_info_rb.html +5 -1
  223. data/doc/rdoc/files/lib/passenger/simple_benchmarking_rb.html +5 -1
  224. data/doc/rdoc/files/lib/passenger/spawn_manager_rb.html +19 -4
  225. data/doc/rdoc/files/lib/passenger/utils_rb.html +10 -3
  226. data/doc/rdoc/fr_class_index.html +1 -6
  227. data/doc/rdoc/fr_file_index.html +3 -4
  228. data/doc/rdoc/fr_method_index.html +55 -60
  229. data/ext/apache2/Application.h +105 -62
  230. data/ext/apache2/ApplicationPool.h +29 -9
  231. data/ext/apache2/ApplicationPoolServer.h +654 -0
  232. data/ext/apache2/ApplicationPoolServerExecutable.cpp +474 -0
  233. data/ext/apache2/Configuration.cpp +278 -63
  234. data/ext/apache2/Configuration.h +45 -13
  235. data/ext/apache2/DummySpawnManager.h +2 -0
  236. data/ext/apache2/Exceptions.h +53 -0
  237. data/ext/apache2/Hooks.cpp +484 -156
  238. data/ext/apache2/Hooks.h +2 -0
  239. data/ext/apache2/Logging.cpp +13 -1
  240. data/ext/apache2/Logging.h +36 -6
  241. data/ext/apache2/MessageChannel.h +32 -16
  242. data/ext/apache2/SpawnManager.h +90 -52
  243. data/ext/apache2/StandardApplicationPool.h +251 -95
  244. data/ext/apache2/System.cpp +232 -0
  245. data/ext/apache2/System.h +228 -0
  246. data/ext/apache2/Utils.cpp +80 -20
  247. data/ext/apache2/Utils.h +107 -3
  248. data/ext/apache2/mod_passenger.c +2 -0
  249. data/ext/boost/VERSION.TXT +1 -1
  250. data/ext/boost/algorithm/string/case_conv.hpp +176 -0
  251. data/ext/boost/algorithm/string/compare.hpp +199 -0
  252. data/ext/boost/algorithm/string/concept.hpp +83 -0
  253. data/ext/boost/algorithm/string/config.hpp +28 -0
  254. data/ext/boost/algorithm/string/constants.hpp +36 -0
  255. data/ext/boost/algorithm/string/detail/case_conv.hpp +112 -0
  256. data/ext/boost/algorithm/string/detail/find_format.hpp +193 -0
  257. data/ext/boost/algorithm/string/detail/find_format_all.hpp +263 -0
  258. data/ext/boost/algorithm/string/detail/find_format_store.hpp +71 -0
  259. data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
  260. data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
  261. data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
  262. data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
  263. data/ext/boost/algorithm/string/detail/util.hpp +106 -0
  264. data/ext/boost/algorithm/string/erase.hpp +844 -0
  265. data/ext/boost/algorithm/string/find_format.hpp +269 -0
  266. data/ext/boost/algorithm/string/finder.hpp +270 -0
  267. data/ext/boost/algorithm/string/formatter.hpp +103 -0
  268. data/ext/boost/algorithm/string/replace.hpp +928 -0
  269. data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
  270. data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
  271. data/ext/boost/assert.hpp +50 -37
  272. data/ext/boost/bind.hpp +38 -0
  273. data/ext/boost/bind/arg.hpp +28 -2
  274. data/ext/boost/bind/bind_template.hpp +119 -0
  275. data/ext/boost/bind/placeholders.hpp +1 -1
  276. data/ext/boost/call_traits.hpp +24 -0
  277. data/ext/boost/checked_delete.hpp +69 -69
  278. data/ext/boost/concept/assert.hpp +46 -0
  279. data/ext/boost/concept/detail/concept_def.hpp +51 -0
  280. data/ext/boost/concept/detail/concept_undef.hpp +5 -0
  281. data/ext/boost/concept/detail/general.hpp +66 -0
  282. data/ext/boost/concept/detail/has_constraints.hpp +48 -0
  283. data/ext/boost/concept/usage.hpp +43 -0
  284. data/ext/boost/concept_check.hpp +988 -0
  285. data/ext/boost/config.hpp +70 -70
  286. data/ext/boost/config/abi/borland_prefix.hpp +27 -27
  287. data/ext/boost/config/abi/borland_suffix.hpp +12 -12
  288. data/ext/boost/config/abi/msvc_prefix.hpp +8 -8
  289. data/ext/boost/config/abi/msvc_suffix.hpp +8 -8
  290. data/ext/boost/config/abi_prefix.hpp +25 -20
  291. data/ext/boost/config/abi_suffix.hpp +26 -23
  292. data/ext/boost/config/auto_link.hpp +368 -363
  293. data/ext/boost/config/compiler/borland.hpp +209 -190
  294. data/ext/boost/config/compiler/comeau.hpp +59 -59
  295. data/ext/boost/config/compiler/common_edg.hpp +62 -62
  296. data/ext/boost/config/compiler/compaq_cxx.hpp +19 -19
  297. data/ext/boost/config/compiler/digitalmars.hpp +67 -49
  298. data/ext/boost/config/compiler/gcc.hpp +149 -105
  299. data/ext/boost/config/compiler/gcc_xml.hpp +30 -30
  300. data/ext/boost/config/compiler/greenhills.hpp +28 -28
  301. data/ext/boost/config/compiler/hp_acc.hpp +95 -72
  302. data/ext/boost/config/compiler/intel.hpp +162 -158
  303. data/ext/boost/config/compiler/kai.hpp +35 -35
  304. data/ext/boost/config/compiler/metrowerks.hpp +111 -104
  305. data/ext/boost/config/compiler/mpw.hpp +51 -51
  306. data/ext/boost/config/compiler/pgi.hpp +25 -0
  307. data/ext/boost/config/compiler/sgi_mipspro.hpp +28 -24
  308. data/ext/boost/config/compiler/sunpro_cc.hpp +98 -92
  309. data/ext/boost/config/compiler/vacpp.hpp +60 -57
  310. data/ext/boost/config/compiler/visualc.hpp +191 -178
  311. data/ext/boost/config/no_tr1/complex.hpp +28 -28
  312. data/ext/boost/config/no_tr1/functional.hpp +28 -28
  313. data/ext/boost/config/no_tr1/memory.hpp +28 -28
  314. data/ext/boost/config/no_tr1/utility.hpp +28 -28
  315. data/ext/boost/config/platform/aix.hpp +33 -33
  316. data/ext/boost/config/platform/amigaos.hpp +15 -15
  317. data/ext/boost/config/platform/beos.hpp +26 -26
  318. data/ext/boost/config/platform/bsd.hpp +73 -73
  319. data/ext/boost/config/platform/cygwin.hpp +51 -48
  320. data/ext/boost/config/platform/hpux.hpp +84 -85
  321. data/ext/boost/config/platform/irix.hpp +31 -31
  322. data/ext/boost/config/platform/linux.hpp +98 -98
  323. data/ext/boost/config/platform/macos.hpp +78 -78
  324. data/ext/boost/config/platform/qnxnto.hpp +31 -31
  325. data/ext/boost/config/platform/solaris.hpp +21 -21
  326. data/ext/boost/config/platform/win32.hpp +58 -58
  327. data/ext/boost/config/posix_features.hpp +95 -95
  328. data/ext/boost/config/requires_threads.hpp +92 -92
  329. data/ext/boost/config/select_compiler_config.hpp +115 -87
  330. data/ext/boost/config/select_platform_config.hpp +90 -90
  331. data/ext/boost/config/select_stdlib_config.hpp +68 -68
  332. data/ext/boost/config/stdlib/dinkumware.hpp +106 -106
  333. data/ext/boost/config/stdlib/libcomo.hpp +46 -46
  334. data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -73
  335. data/ext/boost/config/stdlib/modena.hpp +30 -30
  336. data/ext/boost/config/stdlib/msl.hpp +59 -59
  337. data/ext/boost/config/stdlib/roguewave.hpp +153 -127
  338. data/ext/boost/config/stdlib/sgi.hpp +111 -111
  339. data/ext/boost/config/stdlib/stlport.hpp +201 -201
  340. data/ext/boost/config/stdlib/vacpp.hpp +18 -18
  341. data/ext/boost/config/suffix.hpp +566 -569
  342. data/ext/boost/config/user.hpp +124 -124
  343. data/ext/boost/cstdint.hpp +446 -446
  344. data/ext/boost/date_time/adjust_functors.hpp +178 -0
  345. data/ext/boost/date_time/c_time.hpp +91 -0
  346. data/ext/boost/date_time/compiler_config.hpp +149 -0
  347. data/ext/boost/date_time/constrained_value.hpp +98 -0
  348. data/ext/boost/date_time/date.hpp +197 -0
  349. data/ext/boost/date_time/date_clock_device.hpp +77 -0
  350. data/ext/boost/date_time/date_defs.hpp +26 -0
  351. data/ext/boost/date_time/date_duration.hpp +147 -0
  352. data/ext/boost/date_time/date_duration_types.hpp +269 -0
  353. data/ext/boost/date_time/date_facet.hpp +775 -0
  354. data/ext/boost/date_time/date_format_simple.hpp +159 -0
  355. data/ext/boost/date_time/date_formatting.hpp +127 -0
  356. data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
  357. data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
  358. data/ext/boost/date_time/date_generator_formatter.hpp +263 -0
  359. data/ext/boost/date_time/date_generator_parser.hpp +329 -0
  360. data/ext/boost/date_time/date_generators.hpp +509 -0
  361. data/ext/boost/date_time/date_iterator.hpp +101 -0
  362. data/ext/boost/date_time/date_names_put.hpp +320 -0
  363. data/ext/boost/date_time/date_parsing.hpp +299 -0
  364. data/ext/boost/date_time/dst_rules.hpp +391 -0
  365. data/ext/boost/date_time/filetime_functions.hpp +78 -0
  366. data/ext/boost/date_time/format_date_parser.hpp +731 -0
  367. data/ext/boost/date_time/gregorian/conversion.hpp +73 -0
  368. data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
  369. data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
  370. data/ext/boost/date_time/gregorian/greg_calendar.hpp +47 -0
  371. data/ext/boost/date_time/gregorian/greg_date.hpp +135 -0
  372. data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
  373. data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
  374. data/ext/boost/date_time/gregorian/greg_duration.hpp +38 -0
  375. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +34 -0
  376. data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
  377. data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
  378. data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
  379. data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
  380. data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
  381. data/ext/boost/date_time/gregorian/gregorian_io.hpp +777 -0
  382. data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
  383. data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
  384. data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
  385. data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
  386. data/ext/boost/date_time/int_adapter.hpp +507 -0
  387. data/ext/boost/date_time/iso_format.hpp +303 -0
  388. data/ext/boost/date_time/locale_config.hpp +31 -0
  389. data/ext/boost/date_time/microsec_time_clock.hpp +205 -0
  390. data/ext/boost/date_time/parse_format_base.hpp +29 -0
  391. data/ext/boost/date_time/period.hpp +377 -0
  392. data/ext/boost/date_time/period_formatter.hpp +196 -0
  393. data/ext/boost/date_time/period_parser.hpp +196 -0
  394. data/ext/boost/date_time/posix_time/conversion.hpp +93 -0
  395. data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
  396. data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
  397. data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
  398. data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
  399. data/ext/boost/date_time/posix_time/posix_time_io.hpp +246 -0
  400. data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
  401. data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
  402. data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
  403. data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
  404. data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
  405. data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
  406. data/ext/boost/date_time/special_defs.hpp +25 -0
  407. data/ext/boost/date_time/special_values_formatter.hpp +96 -0
  408. data/ext/boost/date_time/special_values_parser.hpp +159 -0
  409. data/ext/boost/date_time/string_convert.hpp +33 -0
  410. data/ext/boost/date_time/string_parse_tree.hpp +278 -0
  411. data/ext/boost/date_time/strings_from_facet.hpp +123 -0
  412. data/ext/boost/date_time/time.hpp +190 -0
  413. data/ext/boost/date_time/time_clock.hpp +83 -0
  414. data/ext/boost/date_time/time_defs.hpp +33 -0
  415. data/ext/boost/date_time/time_duration.hpp +281 -0
  416. data/ext/boost/date_time/time_facet.hpp +1263 -0
  417. data/ext/boost/date_time/time_formatting_streams.hpp +119 -0
  418. data/ext/boost/date_time/time_iterator.hpp +52 -0
  419. data/ext/boost/date_time/time_parsing.hpp +321 -0
  420. data/ext/boost/date_time/time_resolution_traits.hpp +140 -0
  421. data/ext/boost/date_time/time_system_counted.hpp +254 -0
  422. data/ext/boost/date_time/time_system_split.hpp +213 -0
  423. data/ext/boost/date_time/wrapping_int.hpp +163 -0
  424. data/ext/boost/date_time/year_month_day.hpp +45 -0
  425. data/ext/boost/detail/atomic_count.hpp +124 -0
  426. data/ext/boost/detail/atomic_count_gcc.hpp +68 -0
  427. data/ext/boost/detail/atomic_count_gcc_x86.hpp +84 -0
  428. data/ext/boost/detail/atomic_count_pthreads.hpp +96 -0
  429. data/ext/boost/detail/atomic_count_solaris.hpp +59 -0
  430. data/ext/boost/detail/atomic_count_sync.hpp +57 -0
  431. data/ext/boost/detail/atomic_count_win32.hpp +63 -0
  432. data/ext/boost/detail/bad_weak_ptr.hpp +59 -59
  433. data/ext/boost/detail/call_traits.hpp +164 -0
  434. data/ext/boost/detail/endian.hpp +73 -0
  435. data/ext/boost/detail/indirect_traits.hpp +487 -0
  436. data/ext/boost/detail/iterator.hpp +494 -0
  437. data/ext/boost/detail/lcast_precision.hpp +184 -0
  438. data/ext/boost/detail/limits.hpp +449 -0
  439. data/ext/boost/detail/reference_content.hpp +141 -141
  440. data/ext/boost/detail/shared_count.hpp +375 -376
  441. data/ext/boost/detail/sp_counted_base.hpp +81 -69
  442. data/ext/boost/detail/sp_counted_base_acc_ia64.hpp +150 -0
  443. data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -170
  444. data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -158
  445. data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -157
  446. data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -181
  447. data/ext/boost/detail/sp_counted_base_gcc_sparc.hpp +166 -0
  448. data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -173
  449. data/ext/boost/detail/sp_counted_base_nt.hpp +107 -107
  450. data/ext/boost/detail/sp_counted_base_pt.hpp +135 -135
  451. data/ext/boost/detail/sp_counted_base_solaris.hpp +113 -0
  452. data/ext/boost/detail/sp_counted_base_sync.hpp +151 -0
  453. data/ext/boost/detail/sp_counted_base_w32.hpp +130 -130
  454. data/ext/boost/detail/sp_counted_impl.hpp +231 -232
  455. data/ext/boost/detail/sp_typeinfo.hpp +83 -0
  456. data/ext/boost/detail/workaround.hpp +202 -74
  457. data/ext/boost/enable_shared_from_this.hpp +73 -0
  458. data/ext/boost/function.hpp +4 -2
  459. data/ext/boost/function/detail/prologue.hpp +1 -0
  460. data/ext/boost/function/function_base.hpp +41 -15
  461. data/ext/boost/function/function_template.hpp +238 -106
  462. data/ext/boost/implicit_cast.hpp +29 -0
  463. data/ext/boost/integer_traits.hpp +236 -0
  464. data/ext/boost/io/ios_state.hpp +431 -0
  465. data/ext/boost/io_fwd.hpp +67 -0
  466. data/ext/boost/is_placeholder.hpp +31 -0
  467. data/ext/boost/iterator.hpp +59 -0
  468. data/ext/boost/iterator/detail/config_def.hpp +135 -0
  469. data/ext/boost/iterator/detail/config_undef.hpp +25 -0
  470. data/ext/boost/iterator/detail/enable_if.hpp +86 -0
  471. data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
  472. data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
  473. data/ext/boost/iterator/interoperable.hpp +50 -0
  474. data/ext/boost/iterator/iterator_adaptor.hpp +366 -0
  475. data/ext/boost/iterator/iterator_categories.hpp +188 -0
  476. data/ext/boost/iterator/iterator_facade.hpp +879 -0
  477. data/ext/boost/iterator/iterator_traits.hpp +92 -0
  478. data/ext/boost/iterator/reverse_iterator.hpp +69 -0
  479. data/ext/boost/iterator/transform_iterator.hpp +188 -0
  480. data/ext/boost/lexical_cast.hpp +1205 -0
  481. data/ext/boost/limits.hpp +146 -144
  482. data/ext/boost/mpl/always.hpp +39 -39
  483. data/ext/boost/mpl/and.hpp +60 -56
  484. data/ext/boost/mpl/apply.hpp +225 -225
  485. data/ext/boost/mpl/apply_fwd.hpp +107 -107
  486. data/ext/boost/mpl/apply_wrap.hpp +200 -200
  487. data/ext/boost/mpl/arg.hpp +131 -131
  488. data/ext/boost/mpl/arg_fwd.hpp +28 -28
  489. data/ext/boost/mpl/assert.hpp +370 -361
  490. data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -48
  491. data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -31
  492. data/ext/boost/mpl/aux_/arity.hpp +39 -39
  493. data/ext/boost/mpl/aux_/arity_spec.hpp +67 -67
  494. data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -34
  495. data/ext/boost/mpl/aux_/config/adl.hpp +40 -40
  496. data/ext/boost/mpl/aux_/config/arrays.hpp +30 -30
  497. data/ext/boost/mpl/aux_/config/bind.hpp +33 -33
  498. data/ext/boost/mpl/aux_/config/compiler.hpp +64 -64
  499. data/ext/boost/mpl/aux_/config/ctps.hpp +30 -30
  500. data/ext/boost/mpl/aux_/config/dtp.hpp +46 -46
  501. data/ext/boost/mpl/aux_/config/eti.hpp +47 -47
  502. data/ext/boost/mpl/aux_/config/gcc.hpp +23 -23
  503. data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -32
  504. data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -33
  505. data/ext/boost/mpl/aux_/config/integral.hpp +38 -38
  506. data/ext/boost/mpl/aux_/config/intel.hpp +21 -21
  507. data/ext/boost/mpl/aux_/config/lambda.hpp +32 -32
  508. data/ext/boost/mpl/aux_/config/msvc.hpp +21 -21
  509. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -26
  510. data/ext/boost/mpl/aux_/config/nttp.hpp +41 -41
  511. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -29
  512. data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
  513. data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -39
  514. data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -25
  515. data/ext/boost/mpl/aux_/config/ttp.hpp +41 -39
  516. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -19
  517. data/ext/boost/mpl/aux_/config/workaround.hpp +19 -19
  518. data/ext/boost/mpl/aux_/full_lambda.hpp +350 -350
  519. data/ext/boost/mpl/aux_/has_apply.hpp +32 -32
  520. data/ext/boost/mpl/aux_/has_type.hpp +23 -23
  521. data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -42
  522. data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -93
  523. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -25
  524. data/ext/boost/mpl/aux_/lambda_support.hpp +169 -169
  525. data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -34
  526. data/ext/boost/mpl/aux_/na.hpp +95 -95
  527. data/ext/boost/mpl/aux_/na_assert.hpp +34 -34
  528. data/ext/boost/mpl/aux_/na_fwd.hpp +31 -31
  529. data/ext/boost/mpl/aux_/na_spec.hpp +175 -175
  530. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -48
  531. data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -35
  532. data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -69
  533. data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -169
  534. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -52
  535. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -84
  536. data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -123
  537. data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -561
  538. data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -52
  539. data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -558
  540. data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -69
  541. data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -105
  542. data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -123
  543. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -101
  544. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -105
  545. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -62
  546. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -28
  547. data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -65
  548. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -65
  549. data/ext/boost/mpl/aux_/static_cast.hpp +27 -27
  550. data/ext/boost/mpl/aux_/template_arity.hpp +189 -189
  551. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -23
  552. data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -47
  553. data/ext/boost/mpl/aux_/value_wknd.hpp +89 -89
  554. data/ext/boost/mpl/aux_/yes_no.hpp +58 -58
  555. data/ext/boost/mpl/bind.hpp +547 -547
  556. data/ext/boost/mpl/bind_fwd.hpp +99 -99
  557. data/ext/boost/mpl/bool.hpp +39 -39
  558. data/ext/boost/mpl/bool_fwd.hpp +33 -33
  559. data/ext/boost/mpl/eval_if.hpp +71 -71
  560. data/ext/boost/mpl/has_xxx.hpp +272 -233
  561. data/ext/boost/mpl/identity.hpp +45 -45
  562. data/ext/boost/mpl/if.hpp +135 -135
  563. data/ext/boost/mpl/int.hpp +22 -22
  564. data/ext/boost/mpl/int_fwd.hpp +27 -27
  565. data/ext/boost/mpl/integral_c.hpp +51 -51
  566. data/ext/boost/mpl/integral_c_fwd.hpp +32 -32
  567. data/ext/boost/mpl/integral_c_tag.hpp +26 -26
  568. data/ext/boost/mpl/lambda.hpp +29 -29
  569. data/ext/boost/mpl/lambda_fwd.hpp +57 -57
  570. data/ext/boost/mpl/limits/arity.hpp +21 -21
  571. data/ext/boost/mpl/logical.hpp +21 -21
  572. data/ext/boost/mpl/next.hpp +19 -19
  573. data/ext/boost/mpl/next_prior.hpp +49 -49
  574. data/ext/boost/mpl/not.hpp +51 -51
  575. data/ext/boost/mpl/or.hpp +61 -57
  576. data/ext/boost/mpl/placeholders.hpp +100 -100
  577. data/ext/boost/mpl/protect.hpp +55 -55
  578. data/ext/boost/mpl/quote.hpp +140 -140
  579. data/ext/boost/mpl/size_t.hpp +25 -25
  580. data/ext/boost/mpl/size_t_fwd.hpp +28 -28
  581. data/ext/boost/mpl/void.hpp +76 -76
  582. data/ext/boost/mpl/void_fwd.hpp +26 -26
  583. data/ext/boost/next_prior.hpp +51 -51
  584. data/ext/boost/noncopyable.hpp +36 -36
  585. data/ext/boost/none.hpp +28 -43
  586. data/ext/boost/none_t.hpp +24 -0
  587. data/ext/boost/operators.hpp +943 -0
  588. data/ext/boost/optional.hpp +18 -18
  589. data/ext/boost/optional/optional.hpp +922 -922
  590. data/ext/boost/optional/optional_fwd.hpp +22 -22
  591. data/ext/boost/preprocessor/arithmetic/add.hpp +51 -51
  592. data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -288
  593. data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -288
  594. data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -50
  595. data/ext/boost/preprocessor/array/data.hpp +28 -28
  596. data/ext/boost/preprocessor/array/elem.hpp +29 -29
  597. data/ext/boost/preprocessor/array/size.hpp +28 -28
  598. data/ext/boost/preprocessor/cat.hpp +35 -35
  599. data/ext/boost/preprocessor/comma_if.hpp +17 -17
  600. data/ext/boost/preprocessor/config/config.hpp +70 -70
  601. data/ext/boost/preprocessor/control/detail/while.hpp +536 -536
  602. data/ext/boost/preprocessor/control/expr_iif.hpp +31 -31
  603. data/ext/boost/preprocessor/control/if.hpp +30 -30
  604. data/ext/boost/preprocessor/control/iif.hpp +34 -34
  605. data/ext/boost/preprocessor/control/while.hpp +312 -312
  606. data/ext/boost/preprocessor/debug/error.hpp +33 -33
  607. data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -293
  608. data/ext/boost/preprocessor/detail/check.hpp +48 -48
  609. data/ext/boost/preprocessor/detail/is_binary.hpp +30 -30
  610. data/ext/boost/preprocessor/empty.hpp +17 -17
  611. data/ext/boost/preprocessor/enum.hpp +17 -17
  612. data/ext/boost/preprocessor/enum_params.hpp +17 -17
  613. data/ext/boost/preprocessor/facilities/empty.hpp +21 -21
  614. data/ext/boost/preprocessor/facilities/identity.hpp +23 -23
  615. data/ext/boost/preprocessor/identity.hpp +17 -17
  616. data/ext/boost/preprocessor/inc.hpp +17 -17
  617. data/ext/boost/preprocessor/iterate.hpp +17 -17
  618. data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -99
  619. data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -99
  620. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -1342
  621. data/ext/boost/preprocessor/iteration/iterate.hpp +82 -82
  622. data/ext/boost/preprocessor/list/adt.hpp +73 -73
  623. data/ext/boost/preprocessor/list/append.hpp +40 -40
  624. data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -279
  625. data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -277
  626. data/ext/boost/preprocessor/list/fold_left.hpp +303 -303
  627. data/ext/boost/preprocessor/list/fold_right.hpp +40 -40
  628. data/ext/boost/preprocessor/list/for_each_i.hpp +65 -65
  629. data/ext/boost/preprocessor/list/reverse.hpp +40 -40
  630. data/ext/boost/preprocessor/list/transform.hpp +49 -49
  631. data/ext/boost/preprocessor/logical/and.hpp +30 -30
  632. data/ext/boost/preprocessor/logical/bitand.hpp +38 -38
  633. data/ext/boost/preprocessor/logical/bool.hpp +288 -288
  634. data/ext/boost/preprocessor/logical/compl.hpp +36 -36
  635. data/ext/boost/preprocessor/punctuation/comma.hpp +21 -21
  636. data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -31
  637. data/ext/boost/preprocessor/repeat.hpp +17 -17
  638. data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -536
  639. data/ext/boost/preprocessor/repetition/enum.hpp +66 -66
  640. data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -54
  641. data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -41
  642. data/ext/boost/preprocessor/repetition/for.hpp +306 -306
  643. data/ext/boost/preprocessor/repetition/repeat.hpp +825 -825
  644. data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -87
  645. data/ext/boost/preprocessor/seq/elem.hpp +304 -304
  646. data/ext/boost/preprocessor/seq/enum.hpp +288 -288
  647. data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -61
  648. data/ext/boost/preprocessor/seq/seq.hpp +44 -44
  649. data/ext/boost/preprocessor/seq/size.hpp +548 -548
  650. data/ext/boost/preprocessor/slot/detail/def.hpp +49 -49
  651. data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -247
  652. data/ext/boost/preprocessor/slot/slot.hpp +32 -32
  653. data/ext/boost/preprocessor/stringize.hpp +33 -33
  654. data/ext/boost/preprocessor/tuple/eat.hpp +57 -57
  655. data/ext/boost/preprocessor/tuple/elem.hpp +385 -385
  656. data/ext/boost/preprocessor/tuple/rem.hpp +72 -72
  657. data/ext/boost/preprocessor/tuple/to_list.hpp +62 -62
  658. data/ext/boost/range/as_literal.hpp +131 -0
  659. data/ext/boost/range/begin.hpp +132 -0
  660. data/ext/boost/range/config.hpp +54 -0
  661. data/ext/boost/range/const_iterator.hpp +64 -0
  662. data/ext/boost/range/detail/common.hpp +117 -0
  663. data/ext/boost/range/detail/implementation_help.hpp +99 -0
  664. data/ext/boost/range/detail/sfinae.hpp +77 -0
  665. data/ext/boost/range/detail/str_types.hpp +38 -0
  666. data/ext/boost/range/difference_type.hpp +29 -0
  667. data/ext/boost/range/distance.hpp +34 -0
  668. data/ext/boost/range/empty.hpp +34 -0
  669. data/ext/boost/range/end.hpp +131 -0
  670. data/ext/boost/range/functions.hpp +27 -0
  671. data/ext/boost/range/iterator.hpp +72 -0
  672. data/ext/boost/range/iterator_range.hpp +643 -0
  673. data/ext/boost/range/mutable_iterator.hpp +64 -0
  674. data/ext/boost/range/rbegin.hpp +65 -0
  675. data/ext/boost/range/rend.hpp +65 -0
  676. data/ext/boost/range/reverse_iterator.hpp +40 -0
  677. data/ext/boost/range/size.hpp +36 -0
  678. data/ext/boost/range/size_type.hpp +78 -0
  679. data/ext/boost/range/value_type.hpp +34 -0
  680. data/ext/boost/shared_ptr.hpp +619 -558
  681. data/ext/boost/src/pthread/exceptions.cpp +146 -0
  682. data/ext/boost/src/pthread/once.cpp +51 -0
  683. data/ext/boost/src/pthread/thread.cpp +709 -0
  684. data/ext/boost/src/pthread/timeconv.inl +130 -0
  685. data/ext/boost/src/tss_null.cpp +2 -1
  686. data/ext/boost/src/win32/exceptions.cpp +124 -0
  687. data/ext/boost/src/win32/thread.cpp +629 -0
  688. data/ext/boost/src/win32/timeconv.inl +130 -0
  689. data/ext/boost/src/{tss_dll.cpp → win32/tss_dll.cpp} +0 -0
  690. data/ext/boost/src/win32/tss_pe.cpp +269 -0
  691. data/ext/boost/static_assert.hpp +122 -118
  692. data/ext/boost/thread.hpp +21 -19
  693. data/ext/boost/thread/condition.hpp +16 -201
  694. data/ext/boost/thread/condition_variable.hpp +21 -0
  695. data/ext/boost/thread/detail/config.hpp +94 -95
  696. data/ext/boost/thread/detail/move.hpp +33 -0
  697. data/ext/boost/thread/detail/platform.hpp +71 -0
  698. data/ext/boost/thread/exceptions.hpp +103 -92
  699. data/ext/boost/thread/locks.hpp +589 -0
  700. data/ext/boost/thread/mutex.hpp +21 -170
  701. data/ext/boost/thread/once.hpp +29 -37
  702. data/ext/boost/thread/pthread/condition_variable.hpp +184 -0
  703. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +66 -0
  704. data/ext/boost/thread/pthread/mutex.hpp +211 -0
  705. data/ext/boost/thread/pthread/once.hpp +85 -0
  706. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +50 -0
  707. data/ext/boost/thread/pthread/recursive_mutex.hpp +249 -0
  708. data/ext/boost/thread/pthread/thread.hpp +331 -0
  709. data/ext/boost/thread/pthread/thread_data.hpp +101 -0
  710. data/ext/boost/thread/pthread/timespec.hpp +28 -0
  711. data/ext/boost/thread/pthread/tss.hpp +103 -0
  712. data/ext/boost/thread/recursive_mutex.hpp +21 -184
  713. data/ext/boost/thread/thread.hpp +22 -90
  714. data/ext/boost/thread/thread_time.hpp +46 -0
  715. data/ext/boost/thread/tss.hpp +18 -128
  716. data/ext/boost/thread/xtime.hpp +88 -54
  717. data/ext/boost/throw_exception.hpp +46 -46
  718. data/ext/boost/token_functions.hpp +621 -0
  719. data/ext/boost/token_iterator.hpp +128 -0
  720. data/ext/boost/tokenizer.hpp +98 -0
  721. data/ext/boost/type.hpp +18 -18
  722. data/ext/boost/type_traits/add_const.hpp +47 -47
  723. data/ext/boost/type_traits/add_pointer.hpp +72 -72
  724. data/ext/boost/type_traits/add_reference.hpp +89 -89
  725. data/ext/boost/type_traits/alignment_of.hpp +100 -100
  726. data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -117
  727. data/ext/boost/type_traits/composite_traits.hpp +29 -29
  728. data/ext/boost/type_traits/config.hpp +76 -76
  729. data/ext/boost/type_traits/conversion_traits.hpp +17 -17
  730. data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -173
  731. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -27
  732. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -97
  733. data/ext/boost/type_traits/detail/false_result.hpp +28 -28
  734. data/ext/boost/type_traits/detail/ice_and.hpp +35 -35
  735. data/ext/boost/type_traits/detail/ice_eq.hpp +36 -36
  736. data/ext/boost/type_traits/detail/ice_not.hpp +31 -31
  737. data/ext/boost/type_traits/detail/ice_or.hpp +34 -34
  738. data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -220
  739. data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -817
  740. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -58
  741. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -16
  742. data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -31
  743. data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -61
  744. data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -19
  745. data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -26
  746. data/ext/boost/type_traits/function_traits.hpp +236 -236
  747. data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -38
  748. data/ext/boost/type_traits/has_trivial_copy.hpp +49 -48
  749. data/ext/boost/type_traits/ice.hpp +20 -20
  750. data/ext/boost/type_traits/integral_constant.hpp +53 -53
  751. data/ext/boost/type_traits/intrinsics.hpp +153 -137
  752. data/ext/boost/type_traits/is_abstract.hpp +144 -137
  753. data/ext/boost/type_traits/is_arithmetic.hpp +43 -43
  754. data/ext/boost/type_traits/is_array.hpp +90 -90
  755. data/ext/boost/type_traits/is_class.hpp +128 -128
  756. data/ext/boost/type_traits/is_const.hpp +142 -142
  757. data/ext/boost/type_traits/is_convertible.hpp +418 -416
  758. data/ext/boost/type_traits/is_enum.hpp +180 -180
  759. data/ext/boost/type_traits/is_float.hpp +27 -27
  760. data/ext/boost/type_traits/is_function.hpp +95 -88
  761. data/ext/boost/type_traits/is_integral.hpp +73 -71
  762. data/ext/boost/type_traits/is_member_function_pointer.hpp +134 -126
  763. data/ext/boost/type_traits/is_member_pointer.hpp +114 -108
  764. data/ext/boost/type_traits/is_pod.hpp +135 -135
  765. data/ext/boost/type_traits/is_pointer.hpp +160 -149
  766. data/ext/boost/type_traits/is_reference.hpp +116 -116
  767. data/ext/boost/type_traits/is_same.hpp +103 -103
  768. data/ext/boost/type_traits/is_scalar.hpp +55 -55
  769. data/ext/boost/type_traits/is_union.hpp +49 -49
  770. data/ext/boost/type_traits/is_void.hpp +33 -33
  771. data/ext/boost/type_traits/is_volatile.hpp +131 -131
  772. data/ext/boost/type_traits/remove_const.hpp +78 -78
  773. data/ext/boost/type_traits/remove_cv.hpp +61 -61
  774. data/ext/boost/type_traits/remove_pointer.hpp +43 -43
  775. data/ext/boost/type_traits/remove_reference.hpp +50 -50
  776. data/ext/boost/type_traits/type_with_alignment.hpp +288 -288
  777. data/ext/boost/utility.hpp +19 -19
  778. data/ext/boost/utility/addressof.hpp +58 -58
  779. data/ext/boost/utility/base_from_member.hpp +87 -87
  780. data/ext/boost/utility/compare_pointees.hpp +68 -68
  781. data/ext/boost/utility/enable_if.hpp +119 -119
  782. data/ext/boost/weak_ptr.hpp +0 -6
  783. data/ext/passenger/extconf.rb +3 -0
  784. data/ext/passenger/native_support.c +2 -0
  785. data/lib/passenger/abstract_request_handler.rb +347 -0
  786. data/lib/passenger/abstract_server.rb +31 -5
  787. data/lib/passenger/application.rb +5 -16
  788. data/lib/passenger/console_text_template.rb +2 -0
  789. data/lib/passenger/constants.rb +26 -0
  790. data/lib/passenger/dependencies.rb +23 -3
  791. data/lib/passenger/exceptions.rb +91 -0
  792. data/lib/passenger/html_template.rb +2 -0
  793. data/lib/passenger/message_channel.rb +2 -1
  794. data/lib/passenger/platform_info.rb +2 -0
  795. data/lib/passenger/rack/application_spawner.rb +108 -0
  796. data/lib/passenger/rack/request_handler.rb +85 -0
  797. data/lib/passenger/railz/application_spawner.rb +317 -0
  798. data/lib/passenger/railz/cgi_fixed.rb +68 -0
  799. data/lib/passenger/railz/framework_spawner.rb +344 -0
  800. data/lib/passenger/railz/request_handler.rb +61 -0
  801. data/lib/passenger/simple_benchmarking.rb +2 -0
  802. data/lib/passenger/spawn_manager.rb +190 -83
  803. data/lib/passenger/templates/apache2_config_snippets.txt.erb +2 -2
  804. data/lib/passenger/templates/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
  805. data/lib/passenger/templates/app_exited_during_initialization.html.erb +3 -3
  806. data/lib/passenger/templates/app_init_error.html.erb +2 -2
  807. data/lib/passenger/templates/database_error.html.erb +19 -12
  808. data/lib/passenger/templates/deployment_example.txt.erb +3 -1
  809. data/lib/passenger/templates/error_layout.html.erb +1 -1
  810. data/lib/passenger/templates/load_error.html.erb +2 -2
  811. data/lib/passenger/templates/welcome.txt.erb +1 -1
  812. data/lib/passenger/utils.rb +138 -14
  813. data/lib/passenger/wsgi/application_spawner.rb +94 -0
  814. data/lib/passenger/wsgi/request_handler.py +138 -0
  815. data/man/passenger-config.1 +29 -0
  816. data/man/passenger-make-enterprisey.8 +23 -0
  817. data/man/passenger-memory-stats.8 +33 -0
  818. data/man/passenger-status.8 +43 -0
  819. data/man/passenger-stress-test.1 +43 -0
  820. data/misc/copy_boost_headers.rb +102 -0
  821. data/test/ApplicationPoolServerTest.cpp +5 -3
  822. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +6 -2
  823. data/test/ApplicationPoolTest.cpp +31 -27
  824. data/test/UtilsTest.cpp +1 -0
  825. data/test/integration_tests.rb +327 -137
  826. data/test/ruby/abstract_server_spec.rb +17 -0
  827. data/test/ruby/application_spec.rb +43 -0
  828. data/test/ruby/message_channel_spec.rb +170 -0
  829. data/test/ruby/rack/application_spawner_spec.rb +43 -0
  830. data/test/ruby/rails/application_spawner_spec.rb +109 -0
  831. data/test/ruby/rails/framework_spawner_spec.rb +132 -0
  832. data/test/ruby/rails/minimal_spawner_spec.rb +37 -0
  833. data/test/ruby/rails/spawner_error_handling_spec.rb +52 -0
  834. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +97 -0
  835. data/test/ruby/spawn_manager_spec.rb +178 -0
  836. data/test/ruby/spawn_server_spec.rb +26 -0
  837. data/test/stub/apache2/httpd.conf +75 -0
  838. data/test/stub/apache2/httpd.conf.erb +41 -40
  839. data/test/stub/message_channel_3.rb +2 -0
  840. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +0 -0
  841. data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
  842. data/test/stub/rack/config.ru +4 -0
  843. data/test/stub/rack/public/rack.jpg +0 -0
  844. data/test/stub/{railsapp-without-version-spec → rails_apps/foobar}/app/controllers/application.rb +0 -0
  845. data/test/stub/rails_apps/foobar/app/controllers/bar_controller_1.rb +5 -0
  846. data/test/stub/rails_apps/foobar/app/controllers/bar_controller_2.rb +5 -0
  847. data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +13 -0
  848. data/test/stub/{mycook → rails_apps/foobar}/app/helpers/application_helper.rb +0 -0
  849. data/test/stub/{mycook → rails_apps/foobar}/config/boot.rb +0 -0
  850. data/test/stub/{mycook → rails_apps/foobar}/config/database.yml +0 -0
  851. data/test/stub/rails_apps/foobar/config/environment.rb +59 -0
  852. data/test/stub/{mycook → rails_apps/foobar}/config/environments/development.rb +0 -0
  853. data/test/stub/{mycook → rails_apps/foobar}/config/environments/production.rb +0 -0
  854. data/test/stub/{mycook → rails_apps/foobar}/config/initializers/inflections.rb +0 -0
  855. data/test/stub/{mycook → rails_apps/foobar}/config/initializers/mime_types.rb +0 -0
  856. data/test/stub/{railsapp-without-version-spec → rails_apps/foobar}/config/routes.rb +0 -0
  857. data/test/stub/{mycook → rails_apps/mycook}/app/controllers/application.rb +0 -0
  858. data/test/stub/{mycook → rails_apps/mycook}/app/controllers/recipes_controller.rb +0 -0
  859. data/test/stub/{mycook → rails_apps/mycook}/app/controllers/uploads_controller.rb +0 -0
  860. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +35 -0
  861. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/app/helpers/application_helper.rb +0 -0
  862. data/test/stub/{mycook → rails_apps/mycook}/app/views/layouts/default.rhtml +0 -0
  863. data/test/stub/{mycook → rails_apps/mycook}/app/views/recipes/create.rhtml +0 -0
  864. data/test/stub/{mycook → rails_apps/mycook}/app/views/recipes/index.rhtml +0 -0
  865. data/test/stub/{mycook → rails_apps/mycook}/app/views/recipes/new.rhtml +0 -0
  866. data/test/stub/{mycook → rails_apps/mycook}/app/views/uploads/index.rhtml +0 -0
  867. data/test/stub/{mycook → rails_apps/mycook}/app/views/uploads/new.html.erb +0 -0
  868. data/test/stub/{mycook → rails_apps/mycook}/app/views/welcome/cached.rhtml +0 -0
  869. data/test/stub/{mycook → rails_apps/mycook}/app/views/welcome/index.rhtml +0 -0
  870. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/config/boot.rb +0 -0
  871. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/config/database.yml +0 -0
  872. data/test/stub/{mycook → rails_apps/mycook}/config/environment.rb +0 -0
  873. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/config/environments/development.rb +0 -0
  874. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/config/environments/production.rb +0 -0
  875. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/config/initializers/inflections.rb +0 -0
  876. data/test/stub/{railsapp-without-version-spec → rails_apps/mycook}/config/initializers/mime_types.rb +0 -0
  877. data/test/stub/{mycook → rails_apps/mycook}/config/routes.rb +0 -0
  878. data/test/stub/{broken-railsapp/public → rails_apps/mycook/log}/useless.txt +0 -0
  879. data/test/stub/{mycook → rails_apps/mycook}/public/404.html +0 -0
  880. data/test/stub/{mycook → rails_apps/mycook}/public/422.html +0 -0
  881. data/test/stub/{mycook → rails_apps/mycook}/public/500.html +0 -0
  882. data/test/stub/{mycook → rails_apps/mycook}/public/dispatch.cgi +0 -0
  883. data/test/stub/{mycook → rails_apps/mycook}/public/dispatch.fcgi +0 -0
  884. data/test/stub/{mycook → rails_apps/mycook}/public/dispatch.rb +0 -0
  885. data/test/stub/{mycook → rails_apps/mycook}/public/favicon.ico +0 -0
  886. data/test/stub/{mycook → rails_apps/mycook}/public/images/angrywizard.gif +0 -0
  887. data/test/stub/{mycook → rails_apps/mycook}/public/images/cookbook.gif +0 -0
  888. data/test/stub/{mycook → rails_apps/mycook}/public/images/header.png +0 -0
  889. data/test/stub/{mycook → rails_apps/mycook}/public/images/rails.png +0 -0
  890. data/test/stub/{mycook → rails_apps/mycook}/public/javascripts/application.js +0 -0
  891. data/test/stub/{mycook → rails_apps/mycook}/public/javascripts/controls.js +0 -0
  892. data/test/stub/{mycook → rails_apps/mycook}/public/javascripts/dragdrop.js +0 -0
  893. data/test/stub/{mycook → rails_apps/mycook}/public/javascripts/effects.js +0 -0
  894. data/test/stub/{mycook → rails_apps/mycook}/public/javascripts/prototype.js +0 -0
  895. data/test/stub/{mycook → rails_apps/mycook}/public/robots.txt +0 -0
  896. data/test/stub/{mycook → rails_apps/mycook}/public/uploads.html +0 -0
  897. data/test/stub/{mycook → rails_apps/mycook}/public/welcome/cached.html +0 -0
  898. data/test/stub/{broken-railsapp4/public → rails_apps/mycook/tmp/cache}/useless.txt +0 -0
  899. data/test/stub/{broken-railsapp5/public → rails_apps/mycook/tmp/pids}/useless.txt +0 -0
  900. data/test/stub/{railsapp-without-version-spec/public → rails_apps/mycook/tmp/sessions}/useless.txt +0 -0
  901. data/test/stub/rails_apps/mycook/tmp/sockets/useless.txt +1 -0
  902. data/test/stub/spawn_server.rb +6 -2
  903. data/test/stub/upload_data.txt +494 -0
  904. data/test/stub/vendor_rails/minimal/README +1 -0
  905. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/actionmailer/lib/action_mailer.rb +0 -0
  906. data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +19 -0
  907. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/actionpack/lib/action_pack.rb +0 -0
  908. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/actionpack/lib/action_view.rb +0 -0
  909. data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
  910. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/activeresource/lib/active_resource.rb +0 -0
  911. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/activesupport/lib/active_support.rb +0 -0
  912. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/activesupport/lib/active_support/whiny_nil.rb +0 -0
  913. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/railties/lib/dispatcher.rb +0 -0
  914. data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +51 -0
  915. data/test/stub/{broken-railsapp5/vendor/rails → vendor_rails/minimal}/railties/lib/ruby_version_check.rb +0 -0
  916. data/test/stub/wsgi/passenger_wsgi.py +3 -0
  917. data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
  918. data/test/support/apache2_controller.rb +196 -0
  919. data/test/support/config.rb +4 -1
  920. data/test/support/test_helper.rb +94 -0
  921. metadata +445 -1329
  922. data/doc/cxxapi/ApplicationPoolClientServer_8h-source.html +0 -673
  923. data/doc/rdoc/classes/Passenger/ApplicationSpawner.html +0 -334
  924. data/doc/rdoc/classes/Passenger/ApplicationSpawner/Error.html +0 -98
  925. data/doc/rdoc/classes/Passenger/CGIFixed.html +0 -200
  926. data/doc/rdoc/classes/Passenger/FrameworkSpawner.html +0 -429
  927. data/doc/rdoc/classes/Passenger/FrameworkSpawner/Error.html +0 -98
  928. data/doc/rdoc/classes/Passenger/RequestHandler.html +0 -425
  929. data/doc/rdoc/files/lib/passenger/application_spawner_rb.html +0 -128
  930. data/doc/rdoc/files/lib/passenger/cgi_fixed_rb.html +0 -127
  931. data/doc/rdoc/files/lib/passenger/framework_spawner_rb.html +0 -135
  932. data/doc/rdoc/files/lib/passenger/request_handler_rb.html +0 -122
  933. data/ext/apache2/ApplicationPoolClientServer.h +0 -653
  934. data/ext/boost/bind/apply.hpp +0 -74
  935. data/ext/boost/bind/make_adaptable.hpp +0 -187
  936. data/ext/boost/bind/mem_fn_vw.hpp +0 -130
  937. data/ext/boost/bind/protect.hpp +0 -144
  938. data/ext/boost/format.hpp +0 -59
  939. data/ext/boost/format/alt_sstream.hpp +0 -176
  940. data/ext/boost/format/alt_sstream_impl.hpp +0 -296
  941. data/ext/boost/format/detail/compat_workarounds.hpp +0 -86
  942. data/ext/boost/format/detail/config_macros.hpp +0 -97
  943. data/ext/boost/format/detail/msvc_disambiguater.hpp +0 -56
  944. data/ext/boost/format/detail/unset_macros.hpp +0 -34
  945. data/ext/boost/format/detail/workarounds_gcc-2_95.hpp +0 -162
  946. data/ext/boost/format/detail/workarounds_stlport.hpp +0 -42
  947. data/ext/boost/format/exceptions.hpp +0 -103
  948. data/ext/boost/format/feed_args.hpp +0 -267
  949. data/ext/boost/format/format_class.hpp +0 -143
  950. data/ext/boost/format/format_fwd.hpp +0 -49
  951. data/ext/boost/format/format_implementation.hpp +0 -277
  952. data/ext/boost/format/free_funcs.hpp +0 -70
  953. data/ext/boost/format/group.hpp +0 -676
  954. data/ext/boost/format/internals.hpp +0 -199
  955. data/ext/boost/format/internals_fwd.hpp +0 -60
  956. data/ext/boost/format/parsing.hpp +0 -491
  957. data/ext/boost/function/detail/gen_maybe_include.pl +0 -37
  958. data/ext/boost/function/function0.hpp +0 -12
  959. data/ext/boost/function/function1.hpp +0 -12
  960. data/ext/boost/function/function10.hpp +0 -12
  961. data/ext/boost/function/function2.hpp +0 -12
  962. data/ext/boost/function/function3.hpp +0 -12
  963. data/ext/boost/function/function4.hpp +0 -12
  964. data/ext/boost/function/function5.hpp +0 -12
  965. data/ext/boost/function/function6.hpp +0 -12
  966. data/ext/boost/function/function7.hpp +0 -12
  967. data/ext/boost/function/function8.hpp +0 -12
  968. data/ext/boost/function/function9.hpp +0 -12
  969. data/ext/boost/function/gen_function_N.pl +0 -26
  970. data/ext/boost/mpl/O1_size.hpp +0 -40
  971. data/ext/boost/mpl/O1_size_fwd.hpp +0 -24
  972. data/ext/boost/mpl/accumulate.hpp +0 -39
  973. data/ext/boost/mpl/advance.hpp +0 -76
  974. data/ext/boost/mpl/advance_fwd.hpp +0 -28
  975. data/ext/boost/mpl/alias.hpp +0 -21
  976. data/ext/boost/mpl/arithmetic.hpp +0 -25
  977. data/ext/boost/mpl/as_sequence.hpp +0 -38
  978. data/ext/boost/mpl/at.hpp +0 -52
  979. data/ext/boost/mpl/at_fwd.hpp +0 -24
  980. data/ext/boost/mpl/aux_/O1_size_impl.hpp +0 -87
  981. data/ext/boost/mpl/aux_/advance_backward.hpp +0 -124
  982. data/ext/boost/mpl/aux_/advance_forward.hpp +0 -123
  983. data/ext/boost/mpl/aux_/apply_1st.hpp +0 -35
  984. data/ext/boost/mpl/aux_/arithmetic_op.hpp +0 -92
  985. data/ext/boost/mpl/aux_/at_impl.hpp +0 -45
  986. data/ext/boost/mpl/aux_/back_impl.hpp +0 -43
  987. data/ext/boost/mpl/aux_/basic_bind.hpp +0 -21
  988. data/ext/boost/mpl/aux_/begin_end_impl.hpp +0 -100
  989. data/ext/boost/mpl/aux_/clear_impl.hpp +0 -35
  990. data/ext/boost/mpl/aux_/comparison_op.hpp +0 -83
  991. data/ext/boost/mpl/aux_/config/dependent_nttp.hpp +0 -35
  992. data/ext/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp +0 -27
  993. data/ext/boost/mpl/aux_/config/forwarding.hpp +0 -27
  994. data/ext/boost/mpl/aux_/config/operators.hpp +0 -33
  995. data/ext/boost/mpl/aux_/config/typeof.hpp +0 -38
  996. data/ext/boost/mpl/aux_/contains_impl.hpp +0 -61
  997. data/ext/boost/mpl/aux_/count_args.hpp +0 -105
  998. data/ext/boost/mpl/aux_/count_impl.hpp +0 -44
  999. data/ext/boost/mpl/aux_/empty_impl.hpp +0 -43
  1000. data/ext/boost/mpl/aux_/erase_impl.hpp +0 -69
  1001. data/ext/boost/mpl/aux_/erase_key_impl.hpp +0 -32
  1002. data/ext/boost/mpl/aux_/filter_iter.hpp +0 -140
  1003. data/ext/boost/mpl/aux_/find_if_pred.hpp +0 -31
  1004. data/ext/boost/mpl/aux_/fold_impl.hpp +0 -43
  1005. data/ext/boost/mpl/aux_/fold_impl_body.hpp +0 -365
  1006. data/ext/boost/mpl/aux_/fold_op.hpp +0 -37
  1007. data/ext/boost/mpl/aux_/fold_pred.hpp +0 -37
  1008. data/ext/boost/mpl/aux_/front_impl.hpp +0 -41
  1009. data/ext/boost/mpl/aux_/has_begin.hpp +0 -23
  1010. data/ext/boost/mpl/aux_/has_key_impl.hpp +0 -34
  1011. data/ext/boost/mpl/aux_/has_rebind.hpp +0 -99
  1012. data/ext/boost/mpl/aux_/has_size.hpp +0 -23
  1013. data/ext/boost/mpl/aux_/has_tag.hpp +0 -23
  1014. data/ext/boost/mpl/aux_/insert_impl.hpp +0 -68
  1015. data/ext/boost/mpl/aux_/insert_range_impl.hpp +0 -77
  1016. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +0 -159
  1017. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +0 -64
  1018. data/ext/boost/mpl/aux_/iter_apply.hpp +0 -47
  1019. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +0 -210
  1020. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +0 -42
  1021. data/ext/boost/mpl/aux_/iter_push_front.hpp +0 -36
  1022. data/ext/boost/mpl/aux_/joint_iter.hpp +0 -120
  1023. data/ext/boost/mpl/aux_/lambda_no_ctps.hpp +0 -193
  1024. data/ext/boost/mpl/aux_/lambda_spec.hpp +0 -49
  1025. data/ext/boost/mpl/aux_/largest_int.hpp +0 -63
  1026. data/ext/boost/mpl/aux_/logical_op.hpp +0 -165
  1027. data/ext/boost/mpl/aux_/msvc_dtw.hpp +0 -68
  1028. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +0 -77
  1029. data/ext/boost/mpl/aux_/msvc_is_class.hpp +0 -58
  1030. data/ext/boost/mpl/aux_/msvc_type.hpp +0 -62
  1031. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +0 -77
  1032. data/ext/boost/mpl/aux_/numeric_op.hpp +0 -311
  1033. data/ext/boost/mpl/aux_/order_impl.hpp +0 -76
  1034. data/ext/boost/mpl/aux_/overload_names.hpp +0 -48
  1035. data/ext/boost/mpl/aux_/partition_op.hpp +0 -58
  1036. data/ext/boost/mpl/aux_/pop_back_impl.hpp +0 -34
  1037. data/ext/boost/mpl/aux_/pop_front_impl.hpp +0 -44
  1038. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp +0 -97
  1039. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp +0 -97
  1040. data/ext/boost/mpl/aux_/preprocessed/bcc/and.hpp +0 -69
  1041. data/ext/boost/mpl/aux_/preprocessed/bcc/apply.hpp +0 -169
  1042. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp +0 -52
  1043. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp +0 -456
  1044. data/ext/boost/mpl/aux_/preprocessed/bcc/arg.hpp +0 -117
  1045. data/ext/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp +0 -300
  1046. data/ext/boost/mpl/aux_/preprocessed/bcc/bind.hpp +0 -397
  1047. data/ext/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp +0 -46
  1048. data/ext/boost/mpl/aux_/preprocessed/bcc/bitand.hpp +0 -147
  1049. data/ext/boost/mpl/aux_/preprocessed/bcc/bitor.hpp +0 -147
  1050. data/ext/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp +0 -147
  1051. data/ext/boost/mpl/aux_/preprocessed/bcc/deque.hpp +0 -323
  1052. data/ext/boost/mpl/aux_/preprocessed/bcc/divides.hpp +0 -146
  1053. data/ext/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp +0 -94
  1054. data/ext/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp +0 -180
  1055. data/ext/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp +0 -558
  1056. data/ext/boost/mpl/aux_/preprocessed/bcc/greater.hpp +0 -94
  1057. data/ext/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp +0 -94
  1058. data/ext/boost/mpl/aux_/preprocessed/bcc/inherit.hpp +0 -139
  1059. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp +0 -133
  1060. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp +0 -180
  1061. data/ext/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp +0 -229
  1062. data/ext/boost/mpl/aux_/preprocessed/bcc/less.hpp +0 -94
  1063. data/ext/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp +0 -94
  1064. data/ext/boost/mpl/aux_/preprocessed/bcc/list.hpp +0 -323
  1065. data/ext/boost/mpl/aux_/preprocessed/bcc/list_c.hpp +0 -328
  1066. data/ext/boost/mpl/aux_/preprocessed/bcc/map.hpp +0 -323
  1067. data/ext/boost/mpl/aux_/preprocessed/bcc/minus.hpp +0 -146
  1068. data/ext/boost/mpl/aux_/preprocessed/bcc/modulus.hpp +0 -101
  1069. data/ext/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp +0 -94
  1070. data/ext/boost/mpl/aux_/preprocessed/bcc/or.hpp +0 -69
  1071. data/ext/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp +0 -105
  1072. data/ext/boost/mpl/aux_/preprocessed/bcc/plus.hpp +0 -146
  1073. data/ext/boost/mpl/aux_/preprocessed/bcc/quote.hpp +0 -11
  1074. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp +0 -295
  1075. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp +0 -295
  1076. data/ext/boost/mpl/aux_/preprocessed/bcc/set.hpp +0 -323
  1077. data/ext/boost/mpl/aux_/preprocessed/bcc/set_c.hpp +0 -328
  1078. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp +0 -99
  1079. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp +0 -99
  1080. data/ext/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp +0 -40
  1081. data/ext/boost/mpl/aux_/preprocessed/bcc/times.hpp +0 -146
  1082. data/ext/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp +0 -97
  1083. data/ext/boost/mpl/aux_/preprocessed/bcc/vector.hpp +0 -323
  1084. data/ext/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp +0 -309
  1085. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp +0 -97
  1086. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp +0 -97
  1087. data/ext/boost/mpl/aux_/preprocessed/bcc551/and.hpp +0 -69
  1088. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply.hpp +0 -169
  1089. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp +0 -52
  1090. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp +0 -456
  1091. data/ext/boost/mpl/aux_/preprocessed/bcc551/arg.hpp +0 -123
  1092. data/ext/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp +0 -306
  1093. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind.hpp +0 -403
  1094. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp +0 -46
  1095. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp +0 -147
  1096. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp +0 -147
  1097. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp +0 -147
  1098. data/ext/boost/mpl/aux_/preprocessed/bcc551/deque.hpp +0 -323
  1099. data/ext/boost/mpl/aux_/preprocessed/bcc551/divides.hpp +0 -146
  1100. data/ext/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp +0 -94
  1101. data/ext/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp +0 -180
  1102. data/ext/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp +0 -558
  1103. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater.hpp +0 -94
  1104. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp +0 -94
  1105. data/ext/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp +0 -141
  1106. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp +0 -133
  1107. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp +0 -180
  1108. data/ext/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp +0 -229
  1109. data/ext/boost/mpl/aux_/preprocessed/bcc551/less.hpp +0 -94
  1110. data/ext/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp +0 -94
  1111. data/ext/boost/mpl/aux_/preprocessed/bcc551/list.hpp +0 -323
  1112. data/ext/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp +0 -328
  1113. data/ext/boost/mpl/aux_/preprocessed/bcc551/map.hpp +0 -323
  1114. data/ext/boost/mpl/aux_/preprocessed/bcc551/minus.hpp +0 -146
  1115. data/ext/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp +0 -101
  1116. data/ext/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp +0 -94
  1117. data/ext/boost/mpl/aux_/preprocessed/bcc551/or.hpp +0 -69
  1118. data/ext/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp +0 -105
  1119. data/ext/boost/mpl/aux_/preprocessed/bcc551/plus.hpp +0 -146
  1120. data/ext/boost/mpl/aux_/preprocessed/bcc551/quote.hpp +0 -11
  1121. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp +0 -295
  1122. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp +0 -295
  1123. data/ext/boost/mpl/aux_/preprocessed/bcc551/set.hpp +0 -323
  1124. data/ext/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp +0 -328
  1125. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp +0 -99
  1126. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp +0 -99
  1127. data/ext/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp +0 -40
  1128. data/ext/boost/mpl/aux_/preprocessed/bcc551/times.hpp +0 -146
  1129. data/ext/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp +0 -97
  1130. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector.hpp +0 -323
  1131. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp +0 -309
  1132. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp +0 -97
  1133. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp +0 -97
  1134. data/ext/boost/mpl/aux_/preprocessed/dmc/and.hpp +0 -69
  1135. data/ext/boost/mpl/aux_/preprocessed/dmc/apply.hpp +0 -169
  1136. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp +0 -52
  1137. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp +0 -84
  1138. data/ext/boost/mpl/aux_/preprocessed/dmc/arg.hpp +0 -123
  1139. data/ext/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp +0 -406
  1140. data/ext/boost/mpl/aux_/preprocessed/dmc/bind.hpp +0 -515
  1141. data/ext/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp +0 -53
  1142. data/ext/boost/mpl/aux_/preprocessed/dmc/bitand.hpp +0 -147
  1143. data/ext/boost/mpl/aux_/preprocessed/dmc/bitor.hpp +0 -147
  1144. data/ext/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp +0 -147
  1145. data/ext/boost/mpl/aux_/preprocessed/dmc/deque.hpp +0 -323
  1146. data/ext/boost/mpl/aux_/preprocessed/dmc/divides.hpp +0 -146
  1147. data/ext/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp +0 -94
  1148. data/ext/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp +0 -180
  1149. data/ext/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp +0 -536
  1150. data/ext/boost/mpl/aux_/preprocessed/dmc/greater.hpp +0 -94
  1151. data/ext/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp +0 -94
  1152. data/ext/boost/mpl/aux_/preprocessed/dmc/inherit.hpp +0 -141
  1153. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp +0 -133
  1154. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp +0 -180
  1155. data/ext/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp +0 -229
  1156. data/ext/boost/mpl/aux_/preprocessed/dmc/less.hpp +0 -94
  1157. data/ext/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp +0 -94
  1158. data/ext/boost/mpl/aux_/preprocessed/dmc/list.hpp +0 -323
  1159. data/ext/boost/mpl/aux_/preprocessed/dmc/list_c.hpp +0 -328
  1160. data/ext/boost/mpl/aux_/preprocessed/dmc/map.hpp +0 -323
  1161. data/ext/boost/mpl/aux_/preprocessed/dmc/minus.hpp +0 -146
  1162. data/ext/boost/mpl/aux_/preprocessed/dmc/modulus.hpp +0 -101
  1163. data/ext/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp +0 -94
  1164. data/ext/boost/mpl/aux_/preprocessed/dmc/or.hpp +0 -69
  1165. data/ext/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp +0 -105
  1166. data/ext/boost/mpl/aux_/preprocessed/dmc/plus.hpp +0 -146
  1167. data/ext/boost/mpl/aux_/preprocessed/dmc/quote.hpp +0 -123
  1168. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp +0 -231
  1169. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp +0 -231
  1170. data/ext/boost/mpl/aux_/preprocessed/dmc/set.hpp +0 -323
  1171. data/ext/boost/mpl/aux_/preprocessed/dmc/set_c.hpp +0 -328
  1172. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp +0 -99
  1173. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp +0 -99
  1174. data/ext/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp +0 -11
  1175. data/ext/boost/mpl/aux_/preprocessed/dmc/times.hpp +0 -146
  1176. data/ext/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp +0 -94
  1177. data/ext/boost/mpl/aux_/preprocessed/dmc/vector.hpp +0 -323
  1178. data/ext/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp +0 -309
  1179. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +0 -97
  1180. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +0 -97
  1181. data/ext/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp +0 -440
  1182. data/ext/boost/mpl/aux_/preprocessed/gcc/bitand.hpp +0 -147
  1183. data/ext/boost/mpl/aux_/preprocessed/gcc/bitor.hpp +0 -147
  1184. data/ext/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp +0 -147
  1185. data/ext/boost/mpl/aux_/preprocessed/gcc/deque.hpp +0 -323
  1186. data/ext/boost/mpl/aux_/preprocessed/gcc/divides.hpp +0 -146
  1187. data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +0 -94
  1188. data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +0 -180
  1189. data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +0 -94
  1190. data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +0 -94
  1191. data/ext/boost/mpl/aux_/preprocessed/gcc/inherit.hpp +0 -141
  1192. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +0 -133
  1193. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +0 -180
  1194. data/ext/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp +0 -229
  1195. data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +0 -94
  1196. data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +0 -94
  1197. data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +0 -323
  1198. data/ext/boost/mpl/aux_/preprocessed/gcc/list_c.hpp +0 -328
  1199. data/ext/boost/mpl/aux_/preprocessed/gcc/map.hpp +0 -323
  1200. data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +0 -146
  1201. data/ext/boost/mpl/aux_/preprocessed/gcc/modulus.hpp +0 -101
  1202. data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +0 -94
  1203. data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +0 -146
  1204. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +0 -231
  1205. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp +0 -231
  1206. data/ext/boost/mpl/aux_/preprocessed/gcc/set.hpp +0 -323
  1207. data/ext/boost/mpl/aux_/preprocessed/gcc/set_c.hpp +0 -328
  1208. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp +0 -99
  1209. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp +0 -99
  1210. data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +0 -146
  1211. data/ext/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp +0 -94
  1212. data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +0 -323
  1213. data/ext/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp +0 -309
  1214. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp +0 -132
  1215. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp +0 -132
  1216. data/ext/boost/mpl/aux_/preprocessed/msvc60/and.hpp +0 -73
  1217. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply.hpp +0 -166
  1218. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp +0 -46
  1219. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp +0 -247
  1220. data/ext/boost/mpl/aux_/preprocessed/msvc60/arg.hpp +0 -123
  1221. data/ext/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp +0 -328
  1222. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind.hpp +0 -432
  1223. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp +0 -46
  1224. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp +0 -149
  1225. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp +0 -149
  1226. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp +0 -149
  1227. data/ext/boost/mpl/aux_/preprocessed/msvc60/deque.hpp +0 -556
  1228. data/ext/boost/mpl/aux_/preprocessed/msvc60/divides.hpp +0 -148
  1229. data/ext/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp +0 -102
  1230. data/ext/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp +0 -293
  1231. data/ext/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp +0 -554
  1232. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater.hpp +0 -102
  1233. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp +0 -102
  1234. data/ext/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp +0 -166
  1235. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp +0 -133
  1236. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp +0 -293
  1237. data/ext/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp +0 -229
  1238. data/ext/boost/mpl/aux_/preprocessed/msvc60/less.hpp +0 -102
  1239. data/ext/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp +0 -102
  1240. data/ext/boost/mpl/aux_/preprocessed/msvc60/list.hpp +0 -556
  1241. data/ext/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp +0 -534
  1242. data/ext/boost/mpl/aux_/preprocessed/msvc60/map.hpp +0 -556
  1243. data/ext/boost/mpl/aux_/preprocessed/msvc60/minus.hpp +0 -148
  1244. data/ext/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp +0 -115
  1245. data/ext/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp +0 -102
  1246. data/ext/boost/mpl/aux_/preprocessed/msvc60/or.hpp +0 -73
  1247. data/ext/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp +0 -105
  1248. data/ext/boost/mpl/aux_/preprocessed/msvc60/plus.hpp +0 -148
  1249. data/ext/boost/mpl/aux_/preprocessed/msvc60/quote.hpp +0 -11
  1250. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp +0 -343
  1251. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp +0 -343
  1252. data/ext/boost/mpl/aux_/preprocessed/msvc60/set.hpp +0 -556
  1253. data/ext/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp +0 -534
  1254. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp +0 -114
  1255. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp +0 -114
  1256. data/ext/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp +0 -46
  1257. data/ext/boost/mpl/aux_/preprocessed/msvc60/times.hpp +0 -148
  1258. data/ext/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp +0 -109
  1259. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector.hpp +0 -556
  1260. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp +0 -534
  1261. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp +0 -97
  1262. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp +0 -97
  1263. data/ext/boost/mpl/aux_/preprocessed/msvc70/and.hpp +0 -71
  1264. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply.hpp +0 -160
  1265. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp +0 -46
  1266. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp +0 -138
  1267. data/ext/boost/mpl/aux_/preprocessed/msvc70/arg.hpp +0 -123
  1268. data/ext/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp +0 -328
  1269. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind.hpp +0 -432
  1270. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp +0 -46
  1271. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp +0 -151
  1272. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp +0 -151
  1273. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp +0 -151
  1274. data/ext/boost/mpl/aux_/preprocessed/msvc70/deque.hpp +0 -556
  1275. data/ext/boost/mpl/aux_/preprocessed/msvc70/divides.hpp +0 -150
  1276. data/ext/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp +0 -102
  1277. data/ext/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp +0 -245
  1278. data/ext/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp +0 -554
  1279. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater.hpp +0 -102
  1280. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp +0 -102
  1281. data/ext/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp +0 -166
  1282. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp +0 -133
  1283. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp +0 -245
  1284. data/ext/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp +0 -229
  1285. data/ext/boost/mpl/aux_/preprocessed/msvc70/less.hpp +0 -102
  1286. data/ext/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp +0 -102
  1287. data/ext/boost/mpl/aux_/preprocessed/msvc70/list.hpp +0 -556
  1288. data/ext/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp +0 -534
  1289. data/ext/boost/mpl/aux_/preprocessed/msvc70/map.hpp +0 -556
  1290. data/ext/boost/mpl/aux_/preprocessed/msvc70/minus.hpp +0 -150
  1291. data/ext/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp +0 -115
  1292. data/ext/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp +0 -102
  1293. data/ext/boost/mpl/aux_/preprocessed/msvc70/or.hpp +0 -71
  1294. data/ext/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp +0 -105
  1295. data/ext/boost/mpl/aux_/preprocessed/msvc70/plus.hpp +0 -150
  1296. data/ext/boost/mpl/aux_/preprocessed/msvc70/quote.hpp +0 -116
  1297. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp +0 -295
  1298. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp +0 -295
  1299. data/ext/boost/mpl/aux_/preprocessed/msvc70/set.hpp +0 -556
  1300. data/ext/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp +0 -534
  1301. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp +0 -114
  1302. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp +0 -114
  1303. data/ext/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp +0 -46
  1304. data/ext/boost/mpl/aux_/preprocessed/msvc70/times.hpp +0 -150
  1305. data/ext/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp +0 -109
  1306. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector.hpp +0 -556
  1307. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp +0 -534
  1308. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp +0 -97
  1309. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp +0 -97
  1310. data/ext/boost/mpl/aux_/preprocessed/mwcw/and.hpp +0 -69
  1311. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply.hpp +0 -169
  1312. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp +0 -52
  1313. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp +0 -456
  1314. data/ext/boost/mpl/aux_/preprocessed/mwcw/arg.hpp +0 -123
  1315. data/ext/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp +0 -440
  1316. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind.hpp +0 -561
  1317. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp +0 -52
  1318. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp +0 -147
  1319. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp +0 -147
  1320. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp +0 -147
  1321. data/ext/boost/mpl/aux_/preprocessed/mwcw/deque.hpp +0 -323
  1322. data/ext/boost/mpl/aux_/preprocessed/mwcw/divides.hpp +0 -146
  1323. data/ext/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp +0 -94
  1324. data/ext/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp +0 -180
  1325. data/ext/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp +0 -554
  1326. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater.hpp +0 -94
  1327. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp +0 -94
  1328. data/ext/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp +0 -141
  1329. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp +0 -133
  1330. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp +0 -180
  1331. data/ext/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp +0 -229
  1332. data/ext/boost/mpl/aux_/preprocessed/mwcw/less.hpp +0 -94
  1333. data/ext/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp +0 -94
  1334. data/ext/boost/mpl/aux_/preprocessed/mwcw/list.hpp +0 -323
  1335. data/ext/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp +0 -328
  1336. data/ext/boost/mpl/aux_/preprocessed/mwcw/map.hpp +0 -323
  1337. data/ext/boost/mpl/aux_/preprocessed/mwcw/minus.hpp +0 -146
  1338. data/ext/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp +0 -101
  1339. data/ext/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp +0 -94
  1340. data/ext/boost/mpl/aux_/preprocessed/mwcw/or.hpp +0 -69
  1341. data/ext/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp +0 -105
  1342. data/ext/boost/mpl/aux_/preprocessed/mwcw/plus.hpp +0 -146
  1343. data/ext/boost/mpl/aux_/preprocessed/mwcw/quote.hpp +0 -123
  1344. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp +0 -231
  1345. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp +0 -231
  1346. data/ext/boost/mpl/aux_/preprocessed/mwcw/set.hpp +0 -323
  1347. data/ext/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp +0 -328
  1348. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp +0 -99
  1349. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp +0 -99
  1350. data/ext/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp +0 -11
  1351. data/ext/boost/mpl/aux_/preprocessed/mwcw/times.hpp +0 -146
  1352. data/ext/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp +0 -94
  1353. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector.hpp +0 -323
  1354. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp +0 -309
  1355. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp +0 -97
  1356. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp +0 -97
  1357. data/ext/boost/mpl/aux_/preprocessed/no_ctps/and.hpp +0 -73
  1358. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp +0 -268
  1359. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp +0 -50
  1360. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp +0 -78
  1361. data/ext/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp +0 -123
  1362. data/ext/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp +0 -486
  1363. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp +0 -590
  1364. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp +0 -52
  1365. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp +0 -134
  1366. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp +0 -134
  1367. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp +0 -134
  1368. data/ext/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp +0 -556
  1369. data/ext/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp +0 -133
  1370. data/ext/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp +0 -94
  1371. data/ext/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp +0 -245
  1372. data/ext/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp +0 -554
  1373. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp +0 -94
  1374. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp +0 -94
  1375. data/ext/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp +0 -166
  1376. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp +0 -133
  1377. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp +0 -245
  1378. data/ext/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp +0 -229
  1379. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less.hpp +0 -94
  1380. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp +0 -94
  1381. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list.hpp +0 -556
  1382. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp +0 -534
  1383. data/ext/boost/mpl/aux_/preprocessed/no_ctps/map.hpp +0 -556
  1384. data/ext/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp +0 -133
  1385. data/ext/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp +0 -101
  1386. data/ext/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp +0 -94
  1387. data/ext/boost/mpl/aux_/preprocessed/no_ctps/or.hpp +0 -73
  1388. data/ext/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp +0 -105
  1389. data/ext/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp +0 -133
  1390. data/ext/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp +0 -116
  1391. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp +0 -295
  1392. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp +0 -295
  1393. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set.hpp +0 -556
  1394. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp +0 -534
  1395. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp +0 -99
  1396. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp +0 -99
  1397. data/ext/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp +0 -40
  1398. data/ext/boost/mpl/aux_/preprocessed/no_ctps/times.hpp +0 -133
  1399. data/ext/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp +0 -109
  1400. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp +0 -556
  1401. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp +0 -534
  1402. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp +0 -97
  1403. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp +0 -97
  1404. data/ext/boost/mpl/aux_/preprocessed/no_ttp/and.hpp +0 -69
  1405. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp +0 -169
  1406. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp +0 -52
  1407. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp +0 -84
  1408. data/ext/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp +0 -123
  1409. data/ext/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp +0 -369
  1410. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp +0 -466
  1411. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp +0 -52
  1412. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp +0 -157
  1413. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp +0 -157
  1414. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp +0 -157
  1415. data/ext/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp +0 -323
  1416. data/ext/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp +0 -156
  1417. data/ext/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp +0 -98
  1418. data/ext/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp +0 -180
  1419. data/ext/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp +0 -554
  1420. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp +0 -98
  1421. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp +0 -98
  1422. data/ext/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp +0 -141
  1423. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp +0 -133
  1424. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp +0 -180
  1425. data/ext/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp +0 -229
  1426. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less.hpp +0 -98
  1427. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp +0 -98
  1428. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list.hpp +0 -323
  1429. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp +0 -328
  1430. data/ext/boost/mpl/aux_/preprocessed/no_ttp/map.hpp +0 -323
  1431. data/ext/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp +0 -156
  1432. data/ext/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp +0 -111
  1433. data/ext/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp +0 -98
  1434. data/ext/boost/mpl/aux_/preprocessed/no_ttp/or.hpp +0 -69
  1435. data/ext/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp +0 -105
  1436. data/ext/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp +0 -156
  1437. data/ext/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp +0 -11
  1438. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp +0 -231
  1439. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp +0 -231
  1440. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set.hpp +0 -323
  1441. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp +0 -328
  1442. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp +0 -110
  1443. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp +0 -110
  1444. data/ext/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp +0 -40
  1445. data/ext/boost/mpl/aux_/preprocessed/no_ttp/times.hpp +0 -156
  1446. data/ext/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp +0 -94
  1447. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp +0 -323
  1448. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp +0 -309
  1449. data/ext/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp +0 -97
  1450. data/ext/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp +0 -97
  1451. data/ext/boost/mpl/aux_/preprocessed/plain/and.hpp +0 -64
  1452. data/ext/boost/mpl/aux_/preprocessed/plain/apply.hpp +0 -139
  1453. data/ext/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp +0 -52
  1454. data/ext/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp +0 -84
  1455. data/ext/boost/mpl/aux_/preprocessed/plain/arg.hpp +0 -123
  1456. data/ext/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp +0 -440
  1457. data/ext/boost/mpl/aux_/preprocessed/plain/bind.hpp +0 -561
  1458. data/ext/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp +0 -52
  1459. data/ext/boost/mpl/aux_/preprocessed/plain/bitand.hpp +0 -142
  1460. data/ext/boost/mpl/aux_/preprocessed/plain/bitor.hpp +0 -142
  1461. data/ext/boost/mpl/aux_/preprocessed/plain/bitxor.hpp +0 -142
  1462. data/ext/boost/mpl/aux_/preprocessed/plain/deque.hpp +0 -323
  1463. data/ext/boost/mpl/aux_/preprocessed/plain/divides.hpp +0 -141
  1464. data/ext/boost/mpl/aux_/preprocessed/plain/equal_to.hpp +0 -92
  1465. data/ext/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp +0 -180
  1466. data/ext/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp +0 -554
  1467. data/ext/boost/mpl/aux_/preprocessed/plain/greater.hpp +0 -92
  1468. data/ext/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp +0 -92
  1469. data/ext/boost/mpl/aux_/preprocessed/plain/inherit.hpp +0 -125
  1470. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp +0 -133
  1471. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp +0 -180
  1472. data/ext/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp +0 -228
  1473. data/ext/boost/mpl/aux_/preprocessed/plain/less.hpp +0 -92
  1474. data/ext/boost/mpl/aux_/preprocessed/plain/less_equal.hpp +0 -92
  1475. data/ext/boost/mpl/aux_/preprocessed/plain/list.hpp +0 -323
  1476. data/ext/boost/mpl/aux_/preprocessed/plain/list_c.hpp +0 -328
  1477. data/ext/boost/mpl/aux_/preprocessed/plain/map.hpp +0 -323
  1478. data/ext/boost/mpl/aux_/preprocessed/plain/minus.hpp +0 -141
  1479. data/ext/boost/mpl/aux_/preprocessed/plain/modulus.hpp +0 -99
  1480. data/ext/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp +0 -92
  1481. data/ext/boost/mpl/aux_/preprocessed/plain/or.hpp +0 -64
  1482. data/ext/boost/mpl/aux_/preprocessed/plain/placeholders.hpp +0 -105
  1483. data/ext/boost/mpl/aux_/preprocessed/plain/plus.hpp +0 -141
  1484. data/ext/boost/mpl/aux_/preprocessed/plain/quote.hpp +0 -123
  1485. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp +0 -231
  1486. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp +0 -231
  1487. data/ext/boost/mpl/aux_/preprocessed/plain/set.hpp +0 -323
  1488. data/ext/boost/mpl/aux_/preprocessed/plain/set_c.hpp +0 -328
  1489. data/ext/boost/mpl/aux_/preprocessed/plain/shift_left.hpp +0 -97
  1490. data/ext/boost/mpl/aux_/preprocessed/plain/shift_right.hpp +0 -97
  1491. data/ext/boost/mpl/aux_/preprocessed/plain/template_arity.hpp +0 -11
  1492. data/ext/boost/mpl/aux_/preprocessed/plain/times.hpp +0 -141
  1493. data/ext/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp +0 -94
  1494. data/ext/boost/mpl/aux_/preprocessed/plain/vector.hpp +0 -323
  1495. data/ext/boost/mpl/aux_/preprocessed/plain/vector_c.hpp +0 -309
  1496. data/ext/boost/mpl/aux_/preprocessor/add.hpp +0 -65
  1497. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +0 -67
  1498. data/ext/boost/mpl/aux_/preprocessor/ext_params.hpp +0 -78
  1499. data/ext/boost/mpl/aux_/preprocessor/is_seq.hpp +0 -54
  1500. data/ext/boost/mpl/aux_/preprocessor/partial_spec_params.hpp +0 -32
  1501. data/ext/boost/mpl/aux_/preprocessor/range.hpp +0 -23
  1502. data/ext/boost/mpl/aux_/preprocessor/repeat.hpp +0 -51
  1503. data/ext/boost/mpl/aux_/preprocessor/token_equal.hpp +0 -56
  1504. data/ext/boost/mpl/aux_/preprocessor/tuple.hpp +0 -29
  1505. data/ext/boost/mpl/aux_/ptr_to_ref.hpp +0 -46
  1506. data/ext/boost/mpl/aux_/push_back_impl.hpp +0 -55
  1507. data/ext/boost/mpl/aux_/push_front_impl.hpp +0 -56
  1508. data/ext/boost/mpl/aux_/range_c/O1_size.hpp +0 -31
  1509. data/ext/boost/mpl/aux_/range_c/back.hpp +0 -34
  1510. data/ext/boost/mpl/aux_/range_c/empty.hpp +0 -37
  1511. data/ext/boost/mpl/aux_/range_c/front.hpp +0 -33
  1512. data/ext/boost/mpl/aux_/range_c/iterator.hpp +0 -106
  1513. data/ext/boost/mpl/aux_/range_c/size.hpp +0 -37
  1514. data/ext/boost/mpl/aux_/range_c/tag.hpp +0 -24
  1515. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +0 -44
  1516. data/ext/boost/mpl/aux_/reverse_fold_impl_body.hpp +0 -412
  1517. data/ext/boost/mpl/aux_/reverse_iter_fold_impl.hpp +0 -43
  1518. data/ext/boost/mpl/aux_/sequence_wrapper.hpp +0 -292
  1519. data/ext/boost/mpl/aux_/shift_op.hpp +0 -87
  1520. data/ext/boost/mpl/aux_/single_element_iter.hpp +0 -118
  1521. data/ext/boost/mpl/aux_/size_impl.hpp +0 -52
  1522. data/ext/boost/mpl/aux_/sort_impl.hpp +0 -121
  1523. data/ext/boost/mpl/aux_/test.hpp +0 -32
  1524. data/ext/boost/mpl/aux_/test/assert.hpp +0 -29
  1525. data/ext/boost/mpl/aux_/test/data.hpp +0 -25
  1526. data/ext/boost/mpl/aux_/test/test_case.hpp +0 -21
  1527. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +0 -56
  1528. data/ext/boost/mpl/aux_/transform_iter.hpp +0 -123
  1529. data/ext/boost/mpl/aux_/unwrap.hpp +0 -47
  1530. data/ext/boost/mpl/back.hpp +0 -39
  1531. data/ext/boost/mpl/back_fwd.hpp +0 -24
  1532. data/ext/boost/mpl/back_inserter.hpp +0 -34
  1533. data/ext/boost/mpl/base.hpp +0 -35
  1534. data/ext/boost/mpl/begin.hpp +0 -19
  1535. data/ext/boost/mpl/begin_end.hpp +0 -57
  1536. data/ext/boost/mpl/begin_end_fwd.hpp +0 -27
  1537. data/ext/boost/mpl/bitand.hpp +0 -23
  1538. data/ext/boost/mpl/bitor.hpp +0 -23
  1539. data/ext/boost/mpl/bitwise.hpp +0 -24
  1540. data/ext/boost/mpl/bitxor.hpp +0 -23
  1541. data/ext/boost/mpl/clear.hpp +0 -39
  1542. data/ext/boost/mpl/clear_fwd.hpp +0 -24
  1543. data/ext/boost/mpl/comparison.hpp +0 -24
  1544. data/ext/boost/mpl/contains.hpp +0 -41
  1545. data/ext/boost/mpl/contains_fwd.hpp +0 -25
  1546. data/ext/boost/mpl/copy.hpp +0 -58
  1547. data/ext/boost/mpl/copy_if.hpp +0 -96
  1548. data/ext/boost/mpl/count.hpp +0 -40
  1549. data/ext/boost/mpl/count_fwd.hpp +0 -24
  1550. data/ext/boost/mpl/count_if.hpp +0 -79
  1551. data/ext/boost/mpl/deque.hpp +0 -58
  1552. data/ext/boost/mpl/deref.hpp +0 -41
  1553. data/ext/boost/mpl/distance.hpp +0 -78
  1554. data/ext/boost/mpl/distance_fwd.hpp +0 -28
  1555. data/ext/boost/mpl/divides.hpp +0 -21
  1556. data/ext/boost/mpl/empty.hpp +0 -39
  1557. data/ext/boost/mpl/empty_base.hpp +0 -59
  1558. data/ext/boost/mpl/empty_fwd.hpp +0 -24
  1559. data/ext/boost/mpl/empty_sequence.hpp +0 -42
  1560. data/ext/boost/mpl/end.hpp +0 -19
  1561. data/ext/boost/mpl/equal.hpp +0 -112
  1562. data/ext/boost/mpl/equal_to.hpp +0 -21
  1563. data/ext/boost/mpl/erase.hpp +0 -42
  1564. data/ext/boost/mpl/erase_fwd.hpp +0 -24
  1565. data/ext/boost/mpl/erase_key.hpp +0 -41
  1566. data/ext/boost/mpl/erase_key_fwd.hpp +0 -24
  1567. data/ext/boost/mpl/filter_view.hpp +0 -46
  1568. data/ext/boost/mpl/find.hpp +0 -38
  1569. data/ext/boost/mpl/find_if.hpp +0 -50
  1570. data/ext/boost/mpl/fold.hpp +0 -48
  1571. data/ext/boost/mpl/for_each.hpp +0 -112
  1572. data/ext/boost/mpl/front.hpp +0 -39
  1573. data/ext/boost/mpl/front_fwd.hpp +0 -24
  1574. data/ext/boost/mpl/front_inserter.hpp +0 -33
  1575. data/ext/boost/mpl/greater.hpp +0 -21
  1576. data/ext/boost/mpl/greater_equal.hpp +0 -21
  1577. data/ext/boost/mpl/has_key.hpp +0 -41
  1578. data/ext/boost/mpl/has_key_fwd.hpp +0 -25
  1579. data/ext/boost/mpl/index_if.hpp +0 -60
  1580. data/ext/boost/mpl/index_of.hpp +0 -39
  1581. data/ext/boost/mpl/inherit.hpp +0 -229
  1582. data/ext/boost/mpl/inherit_linearly.hpp +0 -39
  1583. data/ext/boost/mpl/insert.hpp +0 -41
  1584. data/ext/boost/mpl/insert_fwd.hpp +0 -24
  1585. data/ext/boost/mpl/insert_range.hpp +0 -41
  1586. data/ext/boost/mpl/insert_range_fwd.hpp +0 -24
  1587. data/ext/boost/mpl/inserter.hpp +0 -32
  1588. data/ext/boost/mpl/is_placeholder.hpp +0 -67
  1589. data/ext/boost/mpl/is_sequence.hpp +0 -112
  1590. data/ext/boost/mpl/iter_fold.hpp +0 -49
  1591. data/ext/boost/mpl/iter_fold_if.hpp +0 -117
  1592. data/ext/boost/mpl/iterator_category.hpp +0 -35
  1593. data/ext/boost/mpl/iterator_range.hpp +0 -42
  1594. data/ext/boost/mpl/iterator_tags.hpp +0 -27
  1595. data/ext/boost/mpl/joint_view.hpp +0 -65
  1596. data/ext/boost/mpl/key_type.hpp +0 -42
  1597. data/ext/boost/mpl/key_type_fwd.hpp +0 -25
  1598. data/ext/boost/mpl/less.hpp +0 -21
  1599. data/ext/boost/mpl/less_equal.hpp +0 -21
  1600. data/ext/boost/mpl/limits/list.hpp +0 -21
  1601. data/ext/boost/mpl/limits/map.hpp +0 -21
  1602. data/ext/boost/mpl/limits/set.hpp +0 -21
  1603. data/ext/boost/mpl/limits/unrolling.hpp +0 -21
  1604. data/ext/boost/mpl/limits/vector.hpp +0 -21
  1605. data/ext/boost/mpl/list.hpp +0 -57
  1606. data/ext/boost/mpl/list/aux_/O1_size.hpp +0 -33
  1607. data/ext/boost/mpl/list/aux_/begin_end.hpp +0 -44
  1608. data/ext/boost/mpl/list/aux_/clear.hpp +0 -34
  1609. data/ext/boost/mpl/list/aux_/empty.hpp +0 -34
  1610. data/ext/boost/mpl/list/aux_/front.hpp +0 -33
  1611. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +0 -35
  1612. data/ext/boost/mpl/list/aux_/item.hpp +0 -55
  1613. data/ext/boost/mpl/list/aux_/iterator.hpp +0 -76
  1614. data/ext/boost/mpl/list/aux_/numbered.hpp +0 -68
  1615. data/ext/boost/mpl/list/aux_/numbered_c.hpp +0 -71
  1616. data/ext/boost/mpl/list/aux_/pop_front.hpp +0 -34
  1617. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +0 -149
  1618. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp +0 -164
  1619. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +0 -169
  1620. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp +0 -173
  1621. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30.hpp +0 -189
  1622. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp +0 -183
  1623. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40.hpp +0 -209
  1624. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp +0 -193
  1625. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50.hpp +0 -229
  1626. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp +0 -203
  1627. data/ext/boost/mpl/list/aux_/push_back.hpp +0 -36
  1628. data/ext/boost/mpl/list/aux_/push_front.hpp +0 -39
  1629. data/ext/boost/mpl/list/aux_/size.hpp +0 -33
  1630. data/ext/boost/mpl/list/aux_/tag.hpp +0 -24
  1631. data/ext/boost/mpl/list/list0.hpp +0 -42
  1632. data/ext/boost/mpl/list/list0_c.hpp +0 -31
  1633. data/ext/boost/mpl/list/list10.hpp +0 -43
  1634. data/ext/boost/mpl/list/list10_c.hpp +0 -43
  1635. data/ext/boost/mpl/list/list20.hpp +0 -43
  1636. data/ext/boost/mpl/list/list20_c.hpp +0 -43
  1637. data/ext/boost/mpl/list/list30.hpp +0 -43
  1638. data/ext/boost/mpl/list/list30_c.hpp +0 -43
  1639. data/ext/boost/mpl/list/list40.hpp +0 -43
  1640. data/ext/boost/mpl/list/list40_c.hpp +0 -43
  1641. data/ext/boost/mpl/list/list50.hpp +0 -43
  1642. data/ext/boost/mpl/list/list50_c.hpp +0 -43
  1643. data/ext/boost/mpl/list_c.hpp +0 -60
  1644. data/ext/boost/mpl/long.hpp +0 -22
  1645. data/ext/boost/mpl/long_fwd.hpp +0 -27
  1646. data/ext/boost/mpl/lower_bound.hpp +0 -143
  1647. data/ext/boost/mpl/map.hpp +0 -57
  1648. data/ext/boost/mpl/map/aux_/at_impl.hpp +0 -144
  1649. data/ext/boost/mpl/map/aux_/begin_end_impl.hpp +0 -50
  1650. data/ext/boost/mpl/map/aux_/clear_impl.hpp +0 -35
  1651. data/ext/boost/mpl/map/aux_/contains_impl.hpp +0 -43
  1652. data/ext/boost/mpl/map/aux_/empty_impl.hpp +0 -34
  1653. data/ext/boost/mpl/map/aux_/erase_impl.hpp +0 -41
  1654. data/ext/boost/mpl/map/aux_/erase_key_impl.hpp +0 -53
  1655. data/ext/boost/mpl/map/aux_/has_key_impl.hpp +0 -44
  1656. data/ext/boost/mpl/map/aux_/include_preprocessed.hpp +0 -53
  1657. data/ext/boost/mpl/map/aux_/insert_impl.hpp +0 -72
  1658. data/ext/boost/mpl/map/aux_/item.hpp +0 -138
  1659. data/ext/boost/mpl/map/aux_/iterator.hpp +0 -169
  1660. data/ext/boost/mpl/map/aux_/key_type_impl.hpp +0 -36
  1661. data/ext/boost/mpl/map/aux_/map0.hpp +0 -74
  1662. data/ext/boost/mpl/map/aux_/numbered.hpp +0 -110
  1663. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp +0 -350
  1664. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp +0 -370
  1665. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp +0 -390
  1666. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp +0 -410
  1667. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp +0 -430
  1668. data/ext/boost/mpl/map/aux_/preprocessed/plain/map10.hpp +0 -290
  1669. data/ext/boost/mpl/map/aux_/preprocessed/plain/map20.hpp +0 -310
  1670. data/ext/boost/mpl/map/aux_/preprocessed/plain/map30.hpp +0 -330
  1671. data/ext/boost/mpl/map/aux_/preprocessed/plain/map40.hpp +0 -350
  1672. data/ext/boost/mpl/map/aux_/preprocessed/plain/map50.hpp +0 -370
  1673. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp +0 -150
  1674. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp +0 -170
  1675. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp +0 -190
  1676. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp +0 -210
  1677. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp +0 -230
  1678. data/ext/boost/mpl/map/aux_/size_impl.hpp +0 -33
  1679. data/ext/boost/mpl/map/aux_/tag.hpp +0 -24
  1680. data/ext/boost/mpl/map/aux_/value_type_impl.hpp +0 -36
  1681. data/ext/boost/mpl/map/map0.hpp +0 -36
  1682. data/ext/boost/mpl/map/map10.hpp +0 -44
  1683. data/ext/boost/mpl/map/map20.hpp +0 -44
  1684. data/ext/boost/mpl/map/map30.hpp +0 -44
  1685. data/ext/boost/mpl/map/map40.hpp +0 -44
  1686. data/ext/boost/mpl/map/map50.hpp +0 -44
  1687. data/ext/boost/mpl/math/fixed_c.hpp +0 -36
  1688. data/ext/boost/mpl/math/is_even.hpp +0 -54
  1689. data/ext/boost/mpl/math/rational_c.hpp +0 -37
  1690. data/ext/boost/mpl/max.hpp +0 -19
  1691. data/ext/boost/mpl/max_element.hpp +0 -72
  1692. data/ext/boost/mpl/min.hpp +0 -19
  1693. data/ext/boost/mpl/min_element.hpp +0 -40
  1694. data/ext/boost/mpl/min_max.hpp +0 -46
  1695. data/ext/boost/mpl/minus.hpp +0 -21
  1696. data/ext/boost/mpl/modulus.hpp +0 -22
  1697. data/ext/boost/mpl/multiplies.hpp +0 -53
  1698. data/ext/boost/mpl/multiset/aux_/count_impl.hpp +0 -82
  1699. data/ext/boost/mpl/multiset/aux_/insert_impl.hpp +0 -34
  1700. data/ext/boost/mpl/multiset/aux_/item.hpp +0 -114
  1701. data/ext/boost/mpl/multiset/aux_/multiset0.hpp +0 -34
  1702. data/ext/boost/mpl/multiset/aux_/tag.hpp +0 -23
  1703. data/ext/boost/mpl/multiset/multiset0.hpp +0 -36
  1704. data/ext/boost/mpl/negate.hpp +0 -81
  1705. data/ext/boost/mpl/not_equal_to.hpp +0 -21
  1706. data/ext/boost/mpl/numeric_cast.hpp +0 -41
  1707. data/ext/boost/mpl/order.hpp +0 -41
  1708. data/ext/boost/mpl/order_fwd.hpp +0 -25
  1709. data/ext/boost/mpl/pair.hpp +0 -70
  1710. data/ext/boost/mpl/pair_view.hpp +0 -169
  1711. data/ext/boost/mpl/partition.hpp +0 -53
  1712. data/ext/boost/mpl/plus.hpp +0 -21
  1713. data/ext/boost/mpl/pop_back.hpp +0 -39
  1714. data/ext/boost/mpl/pop_back_fwd.hpp +0 -24
  1715. data/ext/boost/mpl/pop_front.hpp +0 -39
  1716. data/ext/boost/mpl/pop_front_fwd.hpp +0 -24
  1717. data/ext/boost/mpl/print.hpp +0 -74
  1718. data/ext/boost/mpl/prior.hpp +0 -19
  1719. data/ext/boost/mpl/push_back.hpp +0 -53
  1720. data/ext/boost/mpl/push_back_fwd.hpp +0 -24
  1721. data/ext/boost/mpl/push_front.hpp +0 -52
  1722. data/ext/boost/mpl/push_front_fwd.hpp +0 -24
  1723. data/ext/boost/mpl/range_c.hpp +0 -48
  1724. data/ext/boost/mpl/remove.hpp +0 -52
  1725. data/ext/boost/mpl/remove_if.hpp +0 -83
  1726. data/ext/boost/mpl/replace.hpp +0 -55
  1727. data/ext/boost/mpl/replace_if.hpp +0 -88
  1728. data/ext/boost/mpl/reverse.hpp +0 -38
  1729. data/ext/boost/mpl/reverse_fold.hpp +0 -50
  1730. data/ext/boost/mpl/reverse_iter_fold.hpp +0 -56
  1731. data/ext/boost/mpl/same_as.hpp +0 -55
  1732. data/ext/boost/mpl/sequence_tag.hpp +0 -124
  1733. data/ext/boost/mpl/sequence_tag_fwd.hpp +0 -26
  1734. data/ext/boost/mpl/set.hpp +0 -57
  1735. data/ext/boost/mpl/set/aux_/at_impl.hpp +0 -40
  1736. data/ext/boost/mpl/set/aux_/begin_end_impl.hpp +0 -43
  1737. data/ext/boost/mpl/set/aux_/clear_impl.hpp +0 -35
  1738. data/ext/boost/mpl/set/aux_/empty_impl.hpp +0 -34
  1739. data/ext/boost/mpl/set/aux_/erase_impl.hpp +0 -41
  1740. data/ext/boost/mpl/set/aux_/erase_key_impl.hpp +0 -53
  1741. data/ext/boost/mpl/set/aux_/has_key_impl.hpp +0 -60
  1742. data/ext/boost/mpl/set/aux_/include_preprocessed.hpp +0 -42
  1743. data/ext/boost/mpl/set/aux_/insert_impl.hpp +0 -65
  1744. data/ext/boost/mpl/set/aux_/item.hpp +0 -82
  1745. data/ext/boost/mpl/set/aux_/iterator.hpp +0 -97
  1746. data/ext/boost/mpl/set/aux_/key_type_impl.hpp +0 -34
  1747. data/ext/boost/mpl/set/aux_/numbered.hpp +0 -48
  1748. data/ext/boost/mpl/set/aux_/numbered_c.hpp +0 -48
  1749. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10.hpp +0 -140
  1750. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp +0 -145
  1751. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20.hpp +0 -168
  1752. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp +0 -154
  1753. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30.hpp +0 -195
  1754. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp +0 -164
  1755. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40.hpp +0 -221
  1756. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp +0 -174
  1757. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50.hpp +0 -250
  1758. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp +0 -184
  1759. data/ext/boost/mpl/set/aux_/set0.hpp +0 -69
  1760. data/ext/boost/mpl/set/aux_/size_impl.hpp +0 -33
  1761. data/ext/boost/mpl/set/aux_/tag.hpp +0 -24
  1762. data/ext/boost/mpl/set/aux_/value_type_impl.hpp +0 -34
  1763. data/ext/boost/mpl/set/set0.hpp +0 -35
  1764. data/ext/boost/mpl/set/set0_c.hpp +0 -32
  1765. data/ext/boost/mpl/set/set10.hpp +0 -44
  1766. data/ext/boost/mpl/set/set10_c.hpp +0 -45
  1767. data/ext/boost/mpl/set/set20.hpp +0 -44
  1768. data/ext/boost/mpl/set/set20_c.hpp +0 -45
  1769. data/ext/boost/mpl/set/set30.hpp +0 -44
  1770. data/ext/boost/mpl/set/set30_c.hpp +0 -45
  1771. data/ext/boost/mpl/set/set40.hpp +0 -44
  1772. data/ext/boost/mpl/set/set40_c.hpp +0 -45
  1773. data/ext/boost/mpl/set/set50.hpp +0 -44
  1774. data/ext/boost/mpl/set/set50_c.hpp +0 -45
  1775. data/ext/boost/mpl/set_c.hpp +0 -60
  1776. data/ext/boost/mpl/shift_left.hpp +0 -22
  1777. data/ext/boost/mpl/shift_right.hpp +0 -22
  1778. data/ext/boost/mpl/single_view.hpp +0 -38
  1779. data/ext/boost/mpl/size.hpp +0 -42
  1780. data/ext/boost/mpl/size_fwd.hpp +0 -24
  1781. data/ext/boost/mpl/sizeof.hpp +0 -36
  1782. data/ext/boost/mpl/sort.hpp +0 -27
  1783. data/ext/boost/mpl/stable_partition.hpp +0 -75
  1784. data/ext/boost/mpl/switch.hpp +0 -49
  1785. data/ext/boost/mpl/tag.hpp +0 -52
  1786. data/ext/boost/mpl/times.hpp +0 -21
  1787. data/ext/boost/mpl/transform.hpp +0 -145
  1788. data/ext/boost/mpl/transform_view.hpp +0 -46
  1789. data/ext/boost/mpl/unique.hpp +0 -85
  1790. data/ext/boost/mpl/unpack_args.hpp +0 -146
  1791. data/ext/boost/mpl/upper_bound.hpp +0 -141
  1792. data/ext/boost/mpl/value_type.hpp +0 -42
  1793. data/ext/boost/mpl/value_type_fwd.hpp +0 -25
  1794. data/ext/boost/mpl/vector.hpp +0 -57
  1795. data/ext/boost/mpl/vector/aux_/O1_size.hpp +0 -56
  1796. data/ext/boost/mpl/vector/aux_/at.hpp +0 -116
  1797. data/ext/boost/mpl/vector/aux_/back.hpp +0 -59
  1798. data/ext/boost/mpl/vector/aux_/begin_end.hpp +0 -49
  1799. data/ext/boost/mpl/vector/aux_/clear.hpp +0 -55
  1800. data/ext/boost/mpl/vector/aux_/empty.hpp +0 -68
  1801. data/ext/boost/mpl/vector/aux_/front.hpp +0 -56
  1802. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +0 -55
  1803. data/ext/boost/mpl/vector/aux_/item.hpp +0 -103
  1804. data/ext/boost/mpl/vector/aux_/iterator.hpp +0 -130
  1805. data/ext/boost/mpl/vector/aux_/numbered.hpp +0 -218
  1806. data/ext/boost/mpl/vector/aux_/numbered_c.hpp +0 -77
  1807. data/ext/boost/mpl/vector/aux_/pop_back.hpp +0 -40
  1808. data/ext/boost/mpl/vector/aux_/pop_front.hpp +0 -40
  1809. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp +0 -1528
  1810. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp +0 -149
  1811. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp +0 -1804
  1812. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp +0 -195
  1813. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp +0 -2124
  1814. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp +0 -238
  1815. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp +0 -2444
  1816. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp +0 -281
  1817. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp +0 -2764
  1818. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp +0 -325
  1819. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +0 -829
  1820. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp +0 -149
  1821. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +0 -1144
  1822. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp +0 -195
  1823. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp +0 -1464
  1824. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp +0 -238
  1825. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp +0 -1784
  1826. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp +0 -281
  1827. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp +0 -2104
  1828. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp +0 -325
  1829. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +0 -139
  1830. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp +0 -154
  1831. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +0 -159
  1832. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp +0 -163
  1833. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp +0 -179
  1834. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp +0 -173
  1835. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp +0 -199
  1836. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp +0 -183
  1837. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp +0 -219
  1838. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp +0 -193
  1839. data/ext/boost/mpl/vector/aux_/push_back.hpp +0 -40
  1840. data/ext/boost/mpl/vector/aux_/push_front.hpp +0 -40
  1841. data/ext/boost/mpl/vector/aux_/size.hpp +0 -49
  1842. data/ext/boost/mpl/vector/aux_/tag.hpp +0 -32
  1843. data/ext/boost/mpl/vector/aux_/vector0.hpp +0 -52
  1844. data/ext/boost/mpl/vector/vector0.hpp +0 -34
  1845. data/ext/boost/mpl/vector/vector0_c.hpp +0 -31
  1846. data/ext/boost/mpl/vector/vector10.hpp +0 -45
  1847. data/ext/boost/mpl/vector/vector10_c.hpp +0 -46
  1848. data/ext/boost/mpl/vector/vector20.hpp +0 -45
  1849. data/ext/boost/mpl/vector/vector20_c.hpp +0 -46
  1850. data/ext/boost/mpl/vector/vector30.hpp +0 -45
  1851. data/ext/boost/mpl/vector/vector30_c.hpp +0 -47
  1852. data/ext/boost/mpl/vector/vector40.hpp +0 -45
  1853. data/ext/boost/mpl/vector/vector40_c.hpp +0 -46
  1854. data/ext/boost/mpl/vector/vector50.hpp +0 -45
  1855. data/ext/boost/mpl/vector/vector50_c.hpp +0 -46
  1856. data/ext/boost/mpl/vector_c.hpp +0 -60
  1857. data/ext/boost/mpl/zip_view.hpp +0 -64
  1858. data/ext/boost/optional/optional_io.hpp +0 -84
  1859. data/ext/boost/preprocessor/arithmetic.hpp +0 -25
  1860. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +0 -61
  1861. data/ext/boost/preprocessor/arithmetic/div.hpp +0 -39
  1862. data/ext/boost/preprocessor/arithmetic/mod.hpp +0 -39
  1863. data/ext/boost/preprocessor/arithmetic/mul.hpp +0 -53
  1864. data/ext/boost/preprocessor/array.hpp +0 -27
  1865. data/ext/boost/preprocessor/array/insert.hpp +0 -55
  1866. data/ext/boost/preprocessor/array/pop_back.hpp +0 -37
  1867. data/ext/boost/preprocessor/array/pop_front.hpp +0 -38
  1868. data/ext/boost/preprocessor/array/push_back.hpp +0 -33
  1869. data/ext/boost/preprocessor/array/push_front.hpp +0 -33
  1870. data/ext/boost/preprocessor/array/remove.hpp +0 -54
  1871. data/ext/boost/preprocessor/array/replace.hpp +0 -49
  1872. data/ext/boost/preprocessor/array/reverse.hpp +0 -29
  1873. data/ext/boost/preprocessor/assert_msg.hpp +0 -17
  1874. data/ext/boost/preprocessor/comma.hpp +0 -17
  1875. data/ext/boost/preprocessor/comparison.hpp +0 -24
  1876. data/ext/boost/preprocessor/comparison/equal.hpp +0 -34
  1877. data/ext/boost/preprocessor/comparison/greater.hpp +0 -38
  1878. data/ext/boost/preprocessor/comparison/greater_equal.hpp +0 -38
  1879. data/ext/boost/preprocessor/comparison/less.hpp +0 -46
  1880. data/ext/boost/preprocessor/comparison/less_equal.hpp +0 -39
  1881. data/ext/boost/preprocessor/comparison/not_equal.hpp +0 -814
  1882. data/ext/boost/preprocessor/config/limits.hpp +0 -29
  1883. data/ext/boost/preprocessor/control.hpp +0 -22
  1884. data/ext/boost/preprocessor/control/deduce_d.hpp +0 -22
  1885. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +0 -536
  1886. data/ext/boost/preprocessor/control/detail/edg/while.hpp +0 -534
  1887. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +0 -277
  1888. data/ext/boost/preprocessor/control/expr_if.hpp +0 -30
  1889. data/ext/boost/preprocessor/debug.hpp +0 -18
  1890. data/ext/boost/preprocessor/debug/assert.hpp +0 -44
  1891. data/ext/boost/preprocessor/debug/line.hpp +0 -35
  1892. data/ext/boost/preprocessor/dec.hpp +0 -17
  1893. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +0 -286
  1894. data/ext/boost/preprocessor/detail/is_nullary.hpp +0 -30
  1895. data/ext/boost/preprocessor/detail/is_unary.hpp +0 -30
  1896. data/ext/boost/preprocessor/detail/null.hpp +0 -17
  1897. data/ext/boost/preprocessor/detail/split.hpp +0 -35
  1898. data/ext/boost/preprocessor/enum_params_with_a_default.hpp +0 -17
  1899. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +0 -17
  1900. data/ext/boost/preprocessor/enum_shifted.hpp +0 -17
  1901. data/ext/boost/preprocessor/enum_shifted_params.hpp +0 -17
  1902. data/ext/boost/preprocessor/expand.hpp +0 -17
  1903. data/ext/boost/preprocessor/expr_if.hpp +0 -17
  1904. data/ext/boost/preprocessor/facilities.hpp +0 -21
  1905. data/ext/boost/preprocessor/facilities/apply.hpp +0 -34
  1906. data/ext/boost/preprocessor/facilities/expand.hpp +0 -28
  1907. data/ext/boost/preprocessor/facilities/intercept.hpp +0 -277
  1908. data/ext/boost/preprocessor/facilities/is_1.hpp +0 -23
  1909. data/ext/boost/preprocessor/facilities/is_empty.hpp +0 -43
  1910. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +0 -30
  1911. data/ext/boost/preprocessor/for.hpp +0 -17
  1912. data/ext/boost/preprocessor/if.hpp +0 -17
  1913. data/ext/boost/preprocessor/iteration.hpp +0 -19
  1914. data/ext/boost/preprocessor/iteration/detail/bounds/lower2.hpp +0 -99
  1915. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +0 -99
  1916. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +0 -99
  1917. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +0 -99
  1918. data/ext/boost/preprocessor/iteration/detail/bounds/upper2.hpp +0 -99
  1919. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +0 -99
  1920. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +0 -99
  1921. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +0 -99
  1922. data/ext/boost/preprocessor/iteration/detail/finish.hpp +0 -99
  1923. data/ext/boost/preprocessor/iteration/detail/iter/forward2.hpp +0 -1338
  1924. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +0 -1338
  1925. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +0 -1338
  1926. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +0 -1338
  1927. data/ext/boost/preprocessor/iteration/detail/iter/reverse1.hpp +0 -1296
  1928. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +0 -1296
  1929. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +0 -1296
  1930. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +0 -1296
  1931. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +0 -1296
  1932. data/ext/boost/preprocessor/iteration/detail/local.hpp +0 -812
  1933. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +0 -782
  1934. data/ext/boost/preprocessor/iteration/detail/self.hpp +0 -21
  1935. data/ext/boost/preprocessor/iteration/detail/start.hpp +0 -99
  1936. data/ext/boost/preprocessor/iteration/local.hpp +0 -26
  1937. data/ext/boost/preprocessor/iteration/self.hpp +0 -19
  1938. data/ext/boost/preprocessor/library.hpp +0 -34
  1939. data/ext/boost/preprocessor/limits.hpp +0 -17
  1940. data/ext/boost/preprocessor/list.hpp +0 -35
  1941. data/ext/boost/preprocessor/list/at.hpp +0 -39
  1942. data/ext/boost/preprocessor/list/cat.hpp +0 -42
  1943. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +0 -279
  1944. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +0 -536
  1945. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +0 -794
  1946. data/ext/boost/preprocessor/list/enum.hpp +0 -41
  1947. data/ext/boost/preprocessor/list/filter.hpp +0 -54
  1948. data/ext/boost/preprocessor/list/first_n.hpp +0 -58
  1949. data/ext/boost/preprocessor/list/for_each.hpp +0 -49
  1950. data/ext/boost/preprocessor/list/for_each_product.hpp +0 -141
  1951. data/ext/boost/preprocessor/list/rest_n.hpp +0 -55
  1952. data/ext/boost/preprocessor/list/size.hpp +0 -58
  1953. data/ext/boost/preprocessor/list/to_tuple.hpp +0 -38
  1954. data/ext/boost/preprocessor/logical.hpp +0 -29
  1955. data/ext/boost/preprocessor/logical/bitnor.hpp +0 -38
  1956. data/ext/boost/preprocessor/logical/bitor.hpp +0 -38
  1957. data/ext/boost/preprocessor/logical/bitxor.hpp +0 -38
  1958. data/ext/boost/preprocessor/logical/nor.hpp +0 -30
  1959. data/ext/boost/preprocessor/logical/not.hpp +0 -30
  1960. data/ext/boost/preprocessor/logical/or.hpp +0 -30
  1961. data/ext/boost/preprocessor/logical/xor.hpp +0 -30
  1962. data/ext/boost/preprocessor/max.hpp +0 -17
  1963. data/ext/boost/preprocessor/min.hpp +0 -17
  1964. data/ext/boost/preprocessor/punctuation.hpp +0 -20
  1965. data/ext/boost/preprocessor/punctuation/paren.hpp +0 -23
  1966. data/ext/boost/preprocessor/punctuation/paren_if.hpp +0 -38
  1967. data/ext/boost/preprocessor/repeat_2nd.hpp +0 -17
  1968. data/ext/boost/preprocessor/repeat_3rd.hpp +0 -17
  1969. data/ext/boost/preprocessor/repeat_from_to.hpp +0 -17
  1970. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +0 -17
  1971. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +0 -17
  1972. data/ext/boost/preprocessor/repetition.hpp +0 -32
  1973. data/ext/boost/preprocessor/repetition/deduce_r.hpp +0 -22
  1974. data/ext/boost/preprocessor/repetition/deduce_z.hpp +0 -22
  1975. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +0 -536
  1976. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +0 -534
  1977. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +0 -277
  1978. data/ext/boost/preprocessor/repetition/enum_params_with_a_default.hpp +0 -25
  1979. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +0 -24
  1980. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +0 -68
  1981. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +0 -51
  1982. data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +0 -44
  1983. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +0 -63
  1984. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +0 -53
  1985. data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +0 -38
  1986. data/ext/boost/preprocessor/selection.hpp +0 -18
  1987. data/ext/boost/preprocessor/selection/max.hpp +0 -39
  1988. data/ext/boost/preprocessor/selection/min.hpp +0 -39
  1989. data/ext/boost/preprocessor/seq.hpp +0 -41
  1990. data/ext/boost/preprocessor/seq/cat.hpp +0 -48
  1991. data/ext/boost/preprocessor/seq/detail/split.hpp +0 -284
  1992. data/ext/boost/preprocessor/seq/filter.hpp +0 -54
  1993. data/ext/boost/preprocessor/seq/first_n.hpp +0 -30
  1994. data/ext/boost/preprocessor/seq/fold_left.hpp +0 -1070
  1995. data/ext/boost/preprocessor/seq/fold_right.hpp +0 -288
  1996. data/ext/boost/preprocessor/seq/for_each.hpp +0 -60
  1997. data/ext/boost/preprocessor/seq/for_each_product.hpp +0 -126
  1998. data/ext/boost/preprocessor/seq/insert.hpp +0 -28
  1999. data/ext/boost/preprocessor/seq/pop_back.hpp +0 -29
  2000. data/ext/boost/preprocessor/seq/pop_front.hpp +0 -27
  2001. data/ext/boost/preprocessor/seq/push_back.hpp +0 -19
  2002. data/ext/boost/preprocessor/seq/push_front.hpp +0 -19
  2003. data/ext/boost/preprocessor/seq/remove.hpp +0 -29
  2004. data/ext/boost/preprocessor/seq/replace.hpp +0 -29
  2005. data/ext/boost/preprocessor/seq/rest_n.hpp +0 -30
  2006. data/ext/boost/preprocessor/seq/reverse.hpp +0 -39
  2007. data/ext/boost/preprocessor/seq/subseq.hpp +0 -28
  2008. data/ext/boost/preprocessor/seq/to_array.hpp +0 -28
  2009. data/ext/boost/preprocessor/seq/to_tuple.hpp +0 -27
  2010. data/ext/boost/preprocessor/seq/transform.hpp +0 -48
  2011. data/ext/boost/preprocessor/slot.hpp +0 -17
  2012. data/ext/boost/preprocessor/slot/counter.hpp +0 -25
  2013. data/ext/boost/preprocessor/slot/detail/counter.hpp +0 -269
  2014. data/ext/boost/preprocessor/slot/detail/slot1.hpp +0 -267
  2015. data/ext/boost/preprocessor/slot/detail/slot2.hpp +0 -267
  2016. data/ext/boost/preprocessor/slot/detail/slot3.hpp +0 -267
  2017. data/ext/boost/preprocessor/slot/detail/slot4.hpp +0 -267
  2018. data/ext/boost/preprocessor/slot/detail/slot5.hpp +0 -267
  2019. data/ext/boost/preprocessor/tuple.hpp +0 -24
  2020. data/ext/boost/preprocessor/tuple/reverse.hpp +0 -62
  2021. data/ext/boost/preprocessor/tuple/to_seq.hpp +0 -60
  2022. data/ext/boost/preprocessor/while.hpp +0 -17
  2023. data/ext/boost/preprocessor/wstringize.hpp +0 -29
  2024. data/ext/boost/src/barrier.cpp +0 -42
  2025. data/ext/boost/src/condition.cpp +0 -692
  2026. data/ext/boost/src/exceptions.cpp +0 -147
  2027. data/ext/boost/src/mutex.cpp +0 -561
  2028. data/ext/boost/src/mutex.inl +0 -128
  2029. data/ext/boost/src/once.cpp +0 -213
  2030. data/ext/boost/src/recursive_mutex.cpp +0 -1040
  2031. data/ext/boost/src/thread.cpp +0 -371
  2032. data/ext/boost/src/timeconv.inl +0 -130
  2033. data/ext/boost/src/tss.cpp +0 -251
  2034. data/ext/boost/src/tss_hooks.cpp +0 -212
  2035. data/ext/boost/src/tss_pe.cpp +0 -179
  2036. data/ext/boost/src/xtime.cpp +0 -158
  2037. data/ext/boost/thread/barrier.hpp +0 -44
  2038. data/ext/boost/thread/detail/force_cast.hpp +0 -39
  2039. data/ext/boost/thread/detail/lock.hpp +0 -209
  2040. data/ext/boost/thread/detail/read_write_lock.hpp +0 -1106
  2041. data/ext/boost/thread/detail/singleton.hpp +0 -59
  2042. data/ext/boost/thread/detail/tss_hooks.hpp +0 -78
  2043. data/ext/boost/type_traits/add_cv.hpp +0 -48
  2044. data/ext/boost/type_traits/add_volatile.hpp +0 -47
  2045. data/ext/boost/type_traits/aligned_storage.hpp +0 -13
  2046. data/ext/boost/type_traits/alignment_traits.hpp +0 -15
  2047. data/ext/boost/type_traits/arithmetic_traits.hpp +0 -20
  2048. data/ext/boost/type_traits/array_traits.hpp +0 -15
  2049. data/ext/boost/type_traits/cv_traits.hpp +0 -24
  2050. data/ext/boost/type_traits/decay.hpp +0 -44
  2051. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +0 -654
  2052. data/ext/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +0 -2759
  2053. data/ext/boost/type_traits/detail/wrap.hpp +0 -18
  2054. data/ext/boost/type_traits/extent.hpp +0 -134
  2055. data/ext/boost/type_traits/has_nothrow_assign.hpp +0 -38
  2056. data/ext/boost/type_traits/has_nothrow_constructor.hpp +0 -38
  2057. data/ext/boost/type_traits/has_nothrow_destructor.hpp +0 -25
  2058. data/ext/boost/type_traits/has_trivial_assign.hpp +0 -50
  2059. data/ext/boost/type_traits/has_trivial_constructor.hpp +0 -42
  2060. data/ext/boost/type_traits/has_trivial_destructor.hpp +0 -42
  2061. data/ext/boost/type_traits/has_virtual_destructor.hpp +0 -25
  2062. data/ext/boost/type_traits/is_base_and_derived.hpp +0 -223
  2063. data/ext/boost/type_traits/is_base_of.hpp +0 -40
  2064. data/ext/boost/type_traits/is_compound.hpp +0 -40
  2065. data/ext/boost/type_traits/is_empty.hpp +0 -211
  2066. data/ext/boost/type_traits/is_floating_point.hpp +0 -27
  2067. data/ext/boost/type_traits/is_fundamental.hpp +0 -41
  2068. data/ext/boost/type_traits/is_member_object_pointer.hpp +0 -46
  2069. data/ext/boost/type_traits/is_object.hpp +0 -53
  2070. data/ext/boost/type_traits/is_polymorphic.hpp +0 -102
  2071. data/ext/boost/type_traits/is_signed.hpp +0 -117
  2072. data/ext/boost/type_traits/is_stateless.hpp +0 -48
  2073. data/ext/boost/type_traits/is_unsigned.hpp +0 -114
  2074. data/ext/boost/type_traits/msvc/remove_all_extents.hpp +0 -47
  2075. data/ext/boost/type_traits/msvc/remove_bounds.hpp +0 -43
  2076. data/ext/boost/type_traits/msvc/remove_const.hpp +0 -143
  2077. data/ext/boost/type_traits/msvc/remove_cv.hpp +0 -190
  2078. data/ext/boost/type_traits/msvc/remove_extent.hpp +0 -43
  2079. data/ext/boost/type_traits/msvc/remove_pointer.hpp +0 -42
  2080. data/ext/boost/type_traits/msvc/remove_reference.hpp +0 -42
  2081. data/ext/boost/type_traits/msvc/remove_volatile.hpp +0 -143
  2082. data/ext/boost/type_traits/msvc/typeof.hpp +0 -50
  2083. data/ext/boost/type_traits/object_traits.hpp +0 -33
  2084. data/ext/boost/type_traits/rank.hpp +0 -81
  2085. data/ext/boost/type_traits/reference_traits.hpp +0 -15
  2086. data/ext/boost/type_traits/remove_all_extents.hpp +0 -48
  2087. data/ext/boost/type_traits/remove_bounds.hpp +0 -48
  2088. data/ext/boost/type_traits/remove_extent.hpp +0 -48
  2089. data/ext/boost/type_traits/remove_volatile.hpp +0 -77
  2090. data/ext/boost/type_traits/same_traits.hpp +0 -15
  2091. data/ext/boost/type_traits/transform_traits.hpp +0 -21
  2092. data/ext/boost/type_traits/transform_traits_spec.hpp +0 -14
  2093. data/ext/boost/utility/in_place_factory.hpp +0 -58
  2094. data/ext/boost/utility/result_of.hpp +0 -66
  2095. data/ext/boost/utility/typed_in_place_factory.hpp +0 -57
  2096. data/ext/boost/utility/value_init.hpp +0 -77
  2097. data/lib/passenger/application_spawner.rb +0 -329
  2098. data/lib/passenger/cgi_fixed.rb +0 -66
  2099. data/lib/passenger/framework_spawner.rb +0 -351
  2100. data/lib/passenger/request_handler.rb +0 -333
  2101. data/lib/passenger/templates/apache_must_be_compiled_with_prefork_mpm.txt.erb +0 -8
  2102. data/test/abstract_server_spec.rb +0 -17
  2103. data/test/application_spawner_spec.rb +0 -80
  2104. data/test/application_spec.rb +0 -25
  2105. data/test/framework_spawner_spec.rb +0 -101
  2106. data/test/message_channel_spec.rb +0 -171
  2107. data/test/minimal_spawner_spec.rb +0 -19
  2108. data/test/spawn_manager_spec.rb +0 -107
  2109. data/test/spawn_server_spec.rb +0 -25
  2110. data/test/spawner_error_handling_spec.rb +0 -35
  2111. data/test/spawner_privilege_lowering_spec.rb +0 -72
  2112. data/test/stub/broken-railsapp/config/environment.rb +0 -2
  2113. data/test/stub/broken-railsapp2/config/environment.rb +0 -3
  2114. data/test/stub/broken-railsapp3/config/environment.rb +0 -4
  2115. data/test/stub/broken-railsapp4/config/environment.rb +0 -1
  2116. data/test/stub/broken-railsapp5/config/environment.rb +0 -1
  2117. data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_controller.rb +0 -0
  2118. data/test/stub/broken-railsapp5/vendor/rails/activerecord/lib/active_record.rb +0 -0
  2119. data/test/stub/broken-railsapp5/vendor/rails/railties/lib/initializer.rb +0 -9
  2120. data/test/stub/mycook/app/controllers/welcome_controller.rb +0 -23
  2121. data/test/stub/railsapp-without-version-spec/app/controllers/foo_controller.rb +0 -5
  2122. data/test/stub/railsapp-without-version-spec/config/environment.rb +0 -58
  2123. data/test/support/apache2_config_writer.rb +0 -44
@@ -4,551 +4,710 @@
4
4
  <link href="doxygen.css" rel="stylesheet" type="text/css">
5
5
  <link href="tabs.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.3 -->
8
- <div class="tabs">
9
- <ul>
10
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
11
- <li><a href="modules.html"><span>Modules</span></a></li>
12
- <li><a href="annotated.html"><span>Classes</span></a></li>
13
- <li class="current"><a href="files.html"><span>Files</span></a></li>
14
- </ul>
15
- </div>
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>
16
18
  <h1>StandardApplicationPool.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
17
19
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
18
20
  <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
19
21
  <a name="l00004"></a>00004 <span class="comment"> *</span>
20
- <a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
21
- <a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
22
- <a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; version 2 of the License.</span>
23
- <a name="l00008"></a>00008 <span class="comment"> *</span>
24
- <a name="l00009"></a>00009 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
25
- <a name="l00010"></a>00010 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
26
- <a name="l00011"></a>00011 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
27
- <a name="l00012"></a>00012 <span class="comment"> * GNU General Public License for more details.</span>
28
- <a name="l00013"></a>00013 <span class="comment"> *</span>
29
- <a name="l00014"></a>00014 <span class="comment"> * You should have received a copy of the GNU General Public License along</span>
30
- <a name="l00015"></a>00015 <span class="comment"> * with this program; if not, write to the Free Software Foundation, Inc.,</span>
31
- <a name="l00016"></a>00016 <span class="comment"> * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
32
- <a name="l00017"></a>00017 <span class="comment"> */</span>
33
- <a name="l00018"></a>00018 <span class="preprocessor">#ifndef _PASSENGER_STANDARD_APPLICATION_POOL_H_</span>
34
- <a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_STANDARD_APPLICATION_POOL_H_</span>
35
- <a name="l00020"></a>00020 <span class="preprocessor"></span>
36
- <a name="l00021"></a>00021 <span class="preprocessor">#include &lt;boost/shared_ptr.hpp&gt;</span>
37
- <a name="l00022"></a>00022 <span class="preprocessor">#include &lt;boost/weak_ptr.hpp&gt;</span>
38
- <a name="l00023"></a>00023 <span class="preprocessor">#include &lt;boost/thread.hpp&gt;</span>
39
- <a name="l00024"></a>00024 <span class="preprocessor">#include &lt;boost/thread/mutex.hpp&gt;</span>
40
- <a name="l00025"></a>00025 <span class="preprocessor">#include &lt;boost/thread/condition.hpp&gt;</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_STANDARD_APPLICATION_POOL_H_</span>
38
+ <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_STANDARD_APPLICATION_POOL_H_</span>
39
+ <a name="l00022"></a>00022 <span class="preprocessor"></span>
40
+ <a name="l00023"></a>00023 <span class="preprocessor">#include &lt;boost/shared_ptr.hpp&gt;</span>
41
+ <a name="l00024"></a>00024 <span class="preprocessor">#include &lt;boost/weak_ptr.hpp&gt;</span>
42
+ <a name="l00025"></a>00025 <span class="preprocessor">#include &lt;boost/thread.hpp&gt;</span>
41
43
  <a name="l00026"></a>00026 <span class="preprocessor">#include &lt;boost/bind.hpp&gt;</span>
42
- <a name="l00027"></a>00027
43
- <a name="l00028"></a>00028 <span class="preprocessor">#include &lt;string&gt;</span>
44
- <a name="l00029"></a>00029 <span class="preprocessor">#include &lt;map&gt;</span>
45
- <a name="l00030"></a>00030 <span class="preprocessor">#include &lt;list&gt;</span>
46
- <a name="l00031"></a>00031
47
- <a name="l00032"></a>00032 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
48
- <a name="l00033"></a>00033 <span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
49
- <a name="l00034"></a>00034 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
50
- <a name="l00035"></a>00035 <span class="preprocessor">#include &lt;ctime&gt;</span>
51
- <a name="l00036"></a>00036 <span class="preprocessor">#include &lt;cerrno&gt;</span>
52
- <a name="l00037"></a>00037 <span class="preprocessor">#ifdef TESTING_APPLICATION_POOL</span>
53
- <a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;cstdlib&gt;</span>
54
- <a name="l00039"></a>00039 <span class="preprocessor">#endif</span>
55
- <a name="l00040"></a>00040 <span class="preprocessor"></span>
56
- <a name="l00041"></a>00041 <span class="preprocessor">#include "ApplicationPool.h"</span>
57
- <a name="l00042"></a>00042 <span class="preprocessor">#include "Logging.h"</span>
58
- <a name="l00043"></a>00043 <span class="preprocessor">#ifdef PASSENGER_USE_DUMMY_SPAWN_MANAGER</span>
59
- <a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor"> #include "DummySpawnManager.h"</span>
60
- <a name="l00045"></a>00045 <span class="preprocessor">#else</span>
61
- <a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor"> #include "SpawnManager.h"</span>
62
- <a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
63
- <a name="l00048"></a>00048 <span class="preprocessor"></span>
64
- <a name="l00049"></a>00049 <span class="keyword">namespace </span>Passenger {
65
- <a name="l00050"></a>00050
66
- <a name="l00051"></a>00051 <span class="keyword">using namespace </span>std;
67
- <a name="l00052"></a>00052 <span class="keyword">using namespace </span>boost;
68
- <a name="l00053"></a>00053
69
- <a name="l00054"></a>00054 <span class="keyword">class </span>ApplicationPoolServer;
44
+ <a name="l00027"></a>00027 <span class="preprocessor">#include &lt;boost/date_time/microsec_time_clock.hpp&gt;</span>
45
+ <a name="l00028"></a>00028 <span class="preprocessor">#include &lt;boost/date_time/posix_time/posix_time.hpp&gt;</span>
46
+ <a name="l00029"></a>00029
47
+ <a name="l00030"></a>00030 <span class="preprocessor">#include &lt;string&gt;</span>
48
+ <a name="l00031"></a>00031 <span class="preprocessor">#include &lt;sstream&gt;</span>
49
+ <a name="l00032"></a>00032 <span class="preprocessor">#include &lt;map&gt;</span>
50
+ <a name="l00033"></a>00033 <span class="preprocessor">#include &lt;list&gt;</span>
51
+ <a name="l00034"></a>00034
52
+ <a name="l00035"></a>00035 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
53
+ <a name="l00036"></a>00036 <span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
54
+ <a name="l00037"></a>00037 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
55
+ <a name="l00038"></a>00038 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
56
+ <a name="l00039"></a>00039 <span class="preprocessor">#include &lt;ctime&gt;</span>
57
+ <a name="l00040"></a>00040 <span class="preprocessor">#include &lt;cerrno&gt;</span>
58
+ <a name="l00041"></a>00041 <span class="preprocessor">#ifdef TESTING_APPLICATION_POOL</span>
59
+ <a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;cstdlib&gt;</span>
60
+ <a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
61
+ <a name="l00044"></a>00044 <span class="preprocessor"></span>
62
+ <a name="l00045"></a>00045 <span class="preprocessor">#include "ApplicationPool.h"</span>
63
+ <a name="l00046"></a>00046 <span class="preprocessor">#include "Logging.h"</span>
64
+ <a name="l00047"></a>00047 <span class="preprocessor">#include "System.h"</span>
65
+ <a name="l00048"></a>00048 <span class="preprocessor">#ifdef PASSENGER_USE_DUMMY_SPAWN_MANAGER</span>
66
+ <a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor"> #include "DummySpawnManager.h"</span>
67
+ <a name="l00050"></a>00050 <span class="preprocessor">#else</span>
68
+ <a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor"> #include "SpawnManager.h"</span>
69
+ <a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
70
+ <a name="l00053"></a>00053 <span class="preprocessor"></span>
71
+ <a name="l00054"></a>00054 <span class="keyword">namespace </span>Passenger {
70
72
  <a name="l00055"></a>00055
71
- <a name="l00056"></a>00056 <span class="comment">/****************************************************************</span>
72
- <a name="l00057"></a>00057 <span class="comment"> *</span>
73
- <a name="l00058"></a>00058 <span class="comment"> * See "doc/ApplicationPool algorithm.txt" for a more readable</span>
74
- <a name="l00059"></a>00059 <span class="comment"> * and detailed description of the algorithm implemented here.</span>
75
- <a name="l00060"></a>00060 <span class="comment"> *</span>
76
- <a name="l00061"></a>00061 <span class="comment"> ****************************************************************/</span>
77
- <a name="l00062"></a>00062 <span class="comment"></span>
78
- <a name="l00063"></a>00063 <span class="comment">/**</span>
79
- <a name="l00064"></a>00064 <span class="comment"> * A standard implementation of ApplicationPool for single-process environments.</span>
73
+ <a name="l00056"></a>00056 <span class="keyword">using namespace </span>std;
74
+ <a name="l00057"></a>00057 <span class="keyword">using namespace </span>boost;
75
+ <a name="l00058"></a>00058
76
+ <a name="l00059"></a>00059 <span class="keyword">class </span>ApplicationPoolServer;
77
+ <a name="l00060"></a>00060
78
+ <a name="l00061"></a>00061 <span class="comment">/****************************************************************</span>
79
+ <a name="l00062"></a>00062 <span class="comment"> *</span>
80
+ <a name="l00063"></a>00063 <span class="comment"> * See "doc/ApplicationPool algorithm.txt" for a more readable</span>
81
+ <a name="l00064"></a>00064 <span class="comment"> * and detailed description of the algorithm implemented here.</span>
80
82
  <a name="l00065"></a>00065 <span class="comment"> *</span>
81
- <a name="l00066"></a>00066 <span class="comment"> * The environment may or may not be multithreaded - StandardApplicationPool is completely</span>
82
- <a name="l00067"></a>00067 <span class="comment"> * thread-safe. Apache with the threading MPM is an example of a multithreaded single-process</span>
83
- <a name="l00068"></a>00068 <span class="comment"> * environment.</span>
84
- <a name="l00069"></a>00069 <span class="comment"> *</span>
85
- <a name="l00070"></a>00070 <span class="comment"> * This class is unusable in multi-process environments such as Apache with the prefork MPM.</span>
86
- <a name="l00071"></a>00071 <span class="comment"> * The reasons are as follows:</span>
87
- <a name="l00072"></a>00072 <span class="comment"> * - StandardApplicationPool uses threads internally. Because threads disappear after a fork(),</span>
88
- <a name="l00073"></a>00073 <span class="comment"> * a StandardApplicationPool object will become unusable after a fork().</span>
89
- <a name="l00074"></a>00074 <span class="comment"> * - StandardApplicationPool stores its internal cache on the heap. Different processes</span>
90
- <a name="l00075"></a>00075 <span class="comment"> * cannot share their heaps, so they will not be able to access each others' pool cache.</span>
91
- <a name="l00076"></a>00076 <span class="comment"> * - StandardApplicationPool has a connection to the spawn server. If there are multiple</span>
92
- <a name="l00077"></a>00077 <span class="comment"> * processes, and they all use the spawn servers's connection at the same time without</span>
93
- <a name="l00078"></a>00078 <span class="comment"> * some sort of synchronization, then bad things will happen.</span>
94
- <a name="l00079"></a>00079 <span class="comment"> *</span>
95
- <a name="l00080"></a>00080 <span class="comment"> * (Of course, StandardApplicationPool &lt;em&gt;is&lt;/em&gt; usable if each process creates its own</span>
96
- <a name="l00081"></a>00081 <span class="comment"> * StandardApplicationPool object, but that would defeat the point of having a shared pool.)</span>
97
- <a name="l00082"></a>00082 <span class="comment"> *</span>
98
- <a name="l00083"></a>00083 <span class="comment"> * For multi-process environments, one should use ApplicationPoolServer instead.</span>
83
+ <a name="l00066"></a>00066 <span class="comment"> ****************************************************************/</span>
84
+ <a name="l00067"></a>00067 <span class="comment"></span>
85
+ <a name="l00068"></a>00068 <span class="comment">/**</span>
86
+ <a name="l00069"></a>00069 <span class="comment"> * A standard implementation of ApplicationPool for single-process environments.</span>
87
+ <a name="l00070"></a>00070 <span class="comment"> *</span>
88
+ <a name="l00071"></a>00071 <span class="comment"> * The environment may or may not be multithreaded - StandardApplicationPool is completely</span>
89
+ <a name="l00072"></a>00072 <span class="comment"> * thread-safe. Apache with the threading MPM is an example of a multithreaded single-process</span>
90
+ <a name="l00073"></a>00073 <span class="comment"> * environment.</span>
91
+ <a name="l00074"></a>00074 <span class="comment"> *</span>
92
+ <a name="l00075"></a>00075 <span class="comment"> * This class is unusable in multi-process environments such as Apache with the prefork MPM.</span>
93
+ <a name="l00076"></a>00076 <span class="comment"> * The reasons are as follows:</span>
94
+ <a name="l00077"></a>00077 <span class="comment"> * - StandardApplicationPool uses threads internally. Because threads disappear after a fork(),</span>
95
+ <a name="l00078"></a>00078 <span class="comment"> * a StandardApplicationPool object will become unusable after a fork().</span>
96
+ <a name="l00079"></a>00079 <span class="comment"> * - StandardApplicationPool stores its internal cache on the heap. Different processes</span>
97
+ <a name="l00080"></a>00080 <span class="comment"> * cannot share their heaps, so they will not be able to access each others' pool cache.</span>
98
+ <a name="l00081"></a>00081 <span class="comment"> * - StandardApplicationPool has a connection to the spawn server. If there are multiple</span>
99
+ <a name="l00082"></a>00082 <span class="comment"> * processes, and they all use the spawn servers's connection at the same time without</span>
100
+ <a name="l00083"></a>00083 <span class="comment"> * some sort of synchronization, then bad things will happen.</span>
99
101
  <a name="l00084"></a>00084 <span class="comment"> *</span>
100
- <a name="l00085"></a>00085 <span class="comment"> * @ingroup Support</span>
101
- <a name="l00086"></a>00086 <span class="comment"> */</span>
102
- <a name="l00087"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html">00087</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a>: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> {
103
- <a name="l00088"></a>00088 <span class="keyword">private</span>:
104
- <a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_MAX_IDLE_TIME = 120;
105
- <a name="l00090"></a>00090 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_MAX_POOL_SIZE = 20;
106
- <a name="l00091"></a>00091
107
- <a name="l00092"></a>00092 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a>;
108
- <a name="l00093"></a>00093 <span class="keyword">struct </span>AppContainer;
109
- <a name="l00094"></a>00094
110
- <a name="l00095"></a>00095 <span class="keyword">typedef</span> shared_ptr&lt;AppContainer&gt; AppContainerPtr;
111
- <a name="l00096"></a>00096 <span class="keyword">typedef</span> list&lt;AppContainerPtr&gt; AppContainerList;
112
- <a name="l00097"></a>00097 <span class="keyword">typedef</span> shared_ptr&lt;AppContainerList&gt; AppContainerListPtr;
113
- <a name="l00098"></a>00098 <span class="keyword">typedef</span> map&lt;string, AppContainerListPtr&gt; ApplicationMap;
114
- <a name="l00099"></a>00099
115
- <a name="l00100"></a>00100 <span class="keyword">struct </span>AppContainer {
116
- <a name="l00101"></a>00101 ApplicationPtr app;
117
- <a name="l00102"></a>00102 time_t lastUsed;
118
- <a name="l00103"></a>00103 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sessions;
119
- <a name="l00104"></a>00104 AppContainerList::iterator iterator;
120
- <a name="l00105"></a>00105 AppContainerList::iterator ia_iterator;
121
- <a name="l00106"></a>00106 };
122
- <a name="l00107"></a>00107
123
- <a name="l00108"></a>00108 <span class="keyword">struct </span>SharedData {
124
- <a name="l00109"></a>00109 mutex lock;
125
- <a name="l00110"></a>00110 condition activeOrMaxChanged;
126
- <a name="l00111"></a>00111
127
- <a name="l00112"></a>00112 ApplicationMap apps;
128
- <a name="l00113"></a>00113 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max;
129
- <a name="l00114"></a>00114 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count;
130
- <a name="l00115"></a>00115 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> active;
131
- <a name="l00116"></a>00116 AppContainerList inactiveApps;
132
- <a name="l00117"></a>00117 map&lt;string, time_t&gt; restartFileTimes;
133
- <a name="l00118"></a>00118 };
134
- <a name="l00119"></a>00119
135
- <a name="l00120"></a>00120 <span class="keyword">typedef</span> shared_ptr&lt;SharedData&gt; SharedDataPtr;
136
- <a name="l00121"></a>00121
137
- <a name="l00122"></a>00122 <span class="keyword">struct </span>SessionCloseCallback {
138
- <a name="l00123"></a>00123 SharedDataPtr data;
139
- <a name="l00124"></a>00124 weak_ptr&lt;AppContainer&gt; container;
140
- <a name="l00125"></a>00125
141
- <a name="l00126"></a>00126 SessionCloseCallback(SharedDataPtr data,
142
- <a name="l00127"></a>00127 <span class="keyword">const</span> weak_ptr&lt;AppContainer&gt; &amp;container) {
143
- <a name="l00128"></a>00128 this-&gt;data = data;
144
- <a name="l00129"></a>00129 this-&gt;container = container;
145
- <a name="l00130"></a>00130 }
146
- <a name="l00131"></a>00131
147
- <a name="l00132"></a>00132 <span class="keywordtype">void</span> operator()() {
148
- <a name="l00133"></a>00133 mutex::scoped_lock l(data-&gt;lock);
149
- <a name="l00134"></a>00134 AppContainerPtr container(this-&gt;container.lock());
150
- <a name="l00135"></a>00135
151
- <a name="l00136"></a>00136 <span class="keywordflow">if</span> (container == NULL) {
152
- <a name="l00137"></a>00137 <span class="keywordflow">return</span>;
153
- <a name="l00138"></a>00138 }
154
- <a name="l00139"></a>00139
155
- <a name="l00140"></a>00140 ApplicationMap::iterator it;
156
- <a name="l00141"></a>00141 it = data-&gt;apps.find(container-&gt;app-&gt;getAppRoot());
157
- <a name="l00142"></a>00142 <span class="keywordflow">if</span> (it != data-&gt;apps.end()) {
158
- <a name="l00143"></a>00143 AppContainerListPtr list(it-&gt;second);
159
- <a name="l00144"></a>00144 container-&gt;lastUsed = time(NULL);
160
- <a name="l00145"></a>00145 container-&gt;sessions--;
161
- <a name="l00146"></a>00146 <span class="keywordflow">if</span> (container-&gt;sessions == 0) {
162
- <a name="l00147"></a>00147 list-&gt;erase(container-&gt;iterator);
163
- <a name="l00148"></a>00148 list-&gt;push_front(container);
164
- <a name="l00149"></a>00149 container-&gt;iterator = list-&gt;begin();
165
- <a name="l00150"></a>00150 data-&gt;inactiveApps.push_back(container);
166
- <a name="l00151"></a>00151 container-&gt;ia_iterator = data-&gt;inactiveApps.end();
167
- <a name="l00152"></a>00152 container-&gt;ia_iterator--;
168
- <a name="l00153"></a>00153 }
169
- <a name="l00154"></a>00154 data-&gt;active--;
170
- <a name="l00155"></a>00155 data-&gt;activeOrMaxChanged.notify_all();
171
- <a name="l00156"></a>00156 }
172
- <a name="l00157"></a>00157 }
173
- <a name="l00158"></a>00158 };
174
- <a name="l00159"></a>00159
175
- <a name="l00160"></a>00160 <span class="preprocessor"> #ifdef PASSENGER_USE_DUMMY_SPAWN_MANAGER</span>
176
- <a name="l00161"></a>00161 <span class="preprocessor"></span> <a class="code" href="classPassenger_1_1DummySpawnManager.html" title="A dummy SpawnManager replacement for testing/debugging purposes.">DummySpawnManager</a> spawnManager;
177
- <a name="l00162"></a>00162 <span class="preprocessor"> #else</span>
178
- <a name="l00163"></a>00163 <span class="preprocessor"></span> <a class="code" href="classPassenger_1_1SpawnManager.html">SpawnManager</a> spawnManager;
179
- <a name="l00164"></a>00164 <span class="preprocessor"> #endif</span>
180
- <a name="l00165"></a>00165 <span class="preprocessor"></span> SharedDataPtr data;
181
- <a name="l00166"></a>00166 thread *cleanerThread;
182
- <a name="l00167"></a>00167 <span class="keywordtype">bool</span> detached;
183
- <a name="l00168"></a>00168 <span class="keywordtype">bool</span> done;
184
- <a name="l00169"></a>00169 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxIdleTime;
185
- <a name="l00170"></a>00170 condition cleanerThreadSleeper;
186
- <a name="l00171"></a>00171
187
- <a name="l00172"></a>00172 <span class="comment">// Shortcuts for instance variables in SharedData. Saves typing in get().</span>
188
- <a name="l00173"></a>00173 mutex &amp;lock;
189
- <a name="l00174"></a>00174 condition &amp;activeOrMaxChanged;
190
- <a name="l00175"></a>00175 ApplicationMap &amp;apps;
191
- <a name="l00176"></a>00176 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;max;
192
- <a name="l00177"></a>00177 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;count;
193
- <a name="l00178"></a>00178 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;active;
194
- <a name="l00179"></a>00179 AppContainerList &amp;inactiveApps;
195
- <a name="l00180"></a>00180 map&lt;string, time_t&gt; &amp;restartFileTimes;
196
- <a name="l00181"></a>00181
197
- <a name="l00182"></a>00182 <span class="keywordtype">bool</span> needsRestart(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot) {
198
- <a name="l00183"></a>00183 <span class="keywordtype">string</span> restartFile(appRoot);
199
- <a name="l00184"></a>00184 restartFile.append(<span class="stringliteral">"/tmp/restart.txt"</span>);
200
- <a name="l00185"></a>00185
201
- <a name="l00186"></a>00186 <span class="keyword">struct </span>stat buf;
202
- <a name="l00187"></a>00187 <span class="keywordtype">bool</span> result;
203
- <a name="l00188"></a>00188 <span class="keywordflow">if</span> (stat(restartFile.c_str(), &amp;buf) == 0) {
204
- <a name="l00189"></a>00189 <span class="keywordtype">int</span> ret;
205
- <a name="l00190"></a>00190 <span class="preprocessor"> #ifdef TESTING_APPLICATION_POOL</span>
206
- <a name="l00191"></a>00191 <span class="preprocessor"></span> <span class="keywordflow">if</span> (getenv(<span class="stringliteral">"nextRestartTxtDeletionShouldFail"</span>) != NULL) {
207
- <a name="l00192"></a>00192 unsetenv(<span class="stringliteral">"nextRestartTxtDeletionShouldFail"</span>);
208
- <a name="l00193"></a>00193 ret = -1;
209
- <a name="l00194"></a>00194 errno = EACCES;
210
- <a name="l00195"></a>00195 } <span class="keywordflow">else</span> {
211
- <a name="l00196"></a>00196 ret = unlink(restartFile.c_str());
212
- <a name="l00197"></a>00197 }
213
- <a name="l00198"></a>00198 <span class="preprocessor"> #else</span>
214
- <a name="l00199"></a>00199 <span class="preprocessor"></span> <span class="keywordflow">do</span> {
215
- <a name="l00200"></a>00200 ret = unlink(restartFile.c_str());
216
- <a name="l00201"></a>00201 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EAGAIN);
217
- <a name="l00202"></a>00202 <span class="preprocessor"> #endif</span>
218
- <a name="l00203"></a>00203 <span class="preprocessor"></span> <span class="keywordflow">if</span> (ret == 0 || errno == ENOENT) {
219
- <a name="l00204"></a>00204 restartFileTimes.erase(appRoot);
220
- <a name="l00205"></a>00205 result = <span class="keyword">true</span>;
221
- <a name="l00206"></a>00206 } <span class="keywordflow">else</span> {
222
- <a name="l00207"></a>00207 map&lt;string, time_t&gt;::const_iterator it;
223
- <a name="l00208"></a>00208
224
- <a name="l00209"></a>00209 it = restartFileTimes.find(appRoot);
225
- <a name="l00210"></a>00210 <span class="keywordflow">if</span> (it == restartFileTimes.end()) {
226
- <a name="l00211"></a>00211 result = <span class="keyword">true</span>;
227
- <a name="l00212"></a>00212 } <span class="keywordflow">else</span> {
228
- <a name="l00213"></a>00213 result = buf.st_mtime != restartFileTimes[appRoot];
229
- <a name="l00214"></a>00214 }
230
- <a name="l00215"></a>00215 restartFileTimes[appRoot] = buf.st_mtime;
231
- <a name="l00216"></a>00216 }
232
- <a name="l00217"></a>00217 } <span class="keywordflow">else</span> {
233
- <a name="l00218"></a>00218 restartFileTimes.erase(appRoot);
234
- <a name="l00219"></a>00219 result = <span class="keyword">false</span>;
235
- <a name="l00220"></a>00220 }
236
- <a name="l00221"></a>00221 <span class="keywordflow">return</span> result;
237
- <a name="l00222"></a>00222 }
238
- <a name="l00223"></a>00223
239
- <a name="l00224"></a>00224 <span class="keywordtype">void</span> cleanerThreadMainLoop() {
240
- <a name="l00225"></a>00225 mutex::scoped_lock l(lock);
241
- <a name="l00226"></a>00226 <span class="keywordflow">while</span> (!done) {
242
- <a name="l00227"></a>00227 xtime xt;
243
- <a name="l00228"></a>00228 xtime_get(&amp;xt, TIME_UTC);
244
- <a name="l00229"></a>00229 xt.sec += maxIdleTime + 1;
245
- <a name="l00230"></a>00230 <span class="keywordflow">if</span> (cleanerThreadSleeper.timed_wait(l, xt)) {
246
- <a name="l00231"></a>00231 <span class="comment">// Condition was woken up.</span>
247
- <a name="l00232"></a>00232 <span class="keywordflow">if</span> (done) {
248
- <a name="l00233"></a>00233 <span class="comment">// StandardApplicationPool is being destroyed.</span>
249
- <a name="l00234"></a>00234 <span class="keywordflow">break</span>;
250
- <a name="l00235"></a>00235 } <span class="keywordflow">else</span> {
251
- <a name="l00236"></a>00236 <span class="keywordflow">continue</span>;
252
- <a name="l00237"></a>00237 }
253
- <a name="l00238"></a>00238 }
254
- <a name="l00239"></a>00239
255
- <a name="l00240"></a>00240 time_t now = time(NULL);
256
- <a name="l00241"></a>00241 AppContainerList::iterator it;
257
- <a name="l00242"></a>00242 <span class="keywordflow">for</span> (it = inactiveApps.begin(); it != inactiveApps.end(); it++) {
258
- <a name="l00243"></a>00243 AppContainer &amp;container(*it-&gt;get());
259
- <a name="l00244"></a>00244 ApplicationPtr app(container.app);
260
- <a name="l00245"></a>00245 AppContainerListPtr appList(apps[app-&gt;getAppRoot()]);
261
- <a name="l00246"></a>00246
262
- <a name="l00247"></a>00247 <span class="keywordflow">if</span> (now - container.lastUsed &gt; (time_t) maxIdleTime) {
263
- <a name="l00248"></a>00248 P_DEBUG(<span class="stringliteral">"Cleaning idle app "</span> &lt;&lt; app-&gt;getAppRoot() &lt;&lt;
264
- <a name="l00249"></a>00249 <span class="stringliteral">" (PID "</span> &lt;&lt; app-&gt;getPid() &lt;&lt; <span class="stringliteral">")"</span>);
265
- <a name="l00250"></a>00250 appList-&gt;erase(container.iterator);
266
- <a name="l00251"></a>00251
267
- <a name="l00252"></a>00252 AppContainerList::iterator prev = it;
268
- <a name="l00253"></a>00253 prev--;
269
- <a name="l00254"></a>00254 inactiveApps.erase(it);
270
- <a name="l00255"></a>00255 it = prev;
271
- <a name="l00256"></a>00256
272
- <a name="l00257"></a>00257 count--;
273
- <a name="l00258"></a>00258 }
274
- <a name="l00259"></a>00259 <span class="keywordflow">if</span> (appList-&gt;empty()) {
275
- <a name="l00260"></a>00260 apps.erase(app-&gt;getAppRoot());
276
- <a name="l00261"></a>00261 data-&gt;restartFileTimes.erase(app-&gt;getAppRoot());
277
- <a name="l00262"></a>00262 }
278
- <a name="l00263"></a>00263 }
279
- <a name="l00264"></a>00264 }
280
- <a name="l00265"></a>00265 }
281
- <a name="l00266"></a>00266
282
- <a name="l00267"></a>00267 <span class="keywordtype">void</span> detach() {
283
- <a name="l00268"></a>00268 detached = <span class="keyword">true</span>;
284
- <a name="l00269"></a>00269
285
- <a name="l00270"></a>00270 ApplicationMap::iterator it;
286
- <a name="l00271"></a>00271 <span class="keywordflow">for</span> (it = apps.begin(); it != apps.end(); it++) {
287
- <a name="l00272"></a>00272 AppContainerList &amp;list = *(it-&gt;second.get());
288
- <a name="l00273"></a>00273 AppContainerList::iterator it2;
289
- <a name="l00274"></a>00274 <span class="keywordflow">for</span> (it2 = list.begin(); it2 != list.end(); it2++) {
290
- <a name="l00275"></a>00275 (*it2)-&gt;app-&gt;detach();
291
- <a name="l00276"></a>00276 }
292
- <a name="l00277"></a>00277 }
293
- <a name="l00278"></a>00278 }
294
- <a name="l00279"></a>00279
295
- <a name="l00280"></a>00280 pair&lt;AppContainerPtr, AppContainerList *&gt;
296
- <a name="l00281"></a>00281 spawnOrUseExisting(mutex::scoped_lock &amp;l, <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot,
297
- <a name="l00282"></a>00282 <span class="keywordtype">bool</span> lowerPrivilege, <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;lowestUser) {
298
- <a name="l00283"></a>00283 AppContainerPtr container;
299
- <a name="l00284"></a>00284 AppContainerList *list;
300
- <a name="l00285"></a>00285
301
- <a name="l00286"></a>00286 <span class="keywordflow">try</span> {
302
- <a name="l00287"></a>00287 ApplicationMap::iterator it(apps.find(appRoot));
303
- <a name="l00288"></a>00288
304
- <a name="l00289"></a>00289 <span class="keywordflow">if</span> (it != apps.end() &amp;&amp; needsRestart(appRoot)) {
305
- <a name="l00290"></a>00290 AppContainerList::iterator it2;
306
- <a name="l00291"></a>00291 list = it-&gt;second.get();
307
- <a name="l00292"></a>00292 <span class="keywordflow">for</span> (it2 = list-&gt;begin(); it2 != list-&gt;end(); it2++) {
308
- <a name="l00293"></a>00293 container = *it2;
309
- <a name="l00294"></a>00294 <span class="keywordflow">if</span> (container-&gt;sessions == 0) {
310
- <a name="l00295"></a>00295 inactiveApps.erase(container-&gt;ia_iterator);
311
- <a name="l00296"></a>00296 } <span class="keywordflow">else</span> {
312
- <a name="l00297"></a>00297 active--;
313
- <a name="l00298"></a>00298 }
314
- <a name="l00299"></a>00299 it2--;
315
- <a name="l00300"></a>00300 list-&gt;erase(container-&gt;iterator);
316
- <a name="l00301"></a>00301 count--;
317
- <a name="l00302"></a>00302 }
318
- <a name="l00303"></a>00303 apps.erase(appRoot);
319
- <a name="l00304"></a>00304 spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#2e85c43042b9556ca2fd74b8d28956ce" title="Remove the cached application instances at the given application root.">reload</a>(appRoot);
320
- <a name="l00305"></a>00305 it = apps.end();
321
- <a name="l00306"></a>00306 }
322
- <a name="l00307"></a>00307
323
- <a name="l00308"></a>00308 <span class="keywordflow">if</span> (it != apps.end()) {
324
- <a name="l00309"></a>00309 list = it-&gt;second.get();
325
- <a name="l00310"></a>00310
326
- <a name="l00311"></a>00311 <span class="keywordflow">if</span> (list-&gt;front()-&gt;sessions == 0 || count &gt;= max) {
327
- <a name="l00312"></a>00312 container = list-&gt;front();
328
- <a name="l00313"></a>00313 list-&gt;pop_front();
329
- <a name="l00314"></a>00314 list-&gt;push_back(container);
330
- <a name="l00315"></a>00315 container-&gt;iterator = list-&gt;end();
331
- <a name="l00316"></a>00316 container-&gt;iterator--;
332
- <a name="l00317"></a>00317 <span class="keywordflow">if</span> (container-&gt;sessions == 0) {
333
- <a name="l00318"></a>00318 inactiveApps.erase(container-&gt;ia_iterator);
334
- <a name="l00319"></a>00319 }
335
- <a name="l00320"></a>00320 active++;
336
- <a name="l00321"></a>00321 } <span class="keywordflow">else</span> {
337
- <a name="l00322"></a>00322 container = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> AppContainer());
338
- <a name="l00323"></a>00323 container-&gt;app = spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#f60a88777284578f905e272122f4b8e6" title="Spawn a new instance of a Ruby on Rails application.">spawn</a>(appRoot,
339
- <a name="l00324"></a>00324 lowerPrivilege, lowestUser);
340
- <a name="l00325"></a>00325 container-&gt;sessions = 0;
341
- <a name="l00326"></a>00326 list-&gt;push_back(container);
342
- <a name="l00327"></a>00327 container-&gt;iterator = list-&gt;end();
343
- <a name="l00328"></a>00328 container-&gt;iterator--;
344
- <a name="l00329"></a>00329 count++;
345
- <a name="l00330"></a>00330 active++;
346
- <a name="l00331"></a>00331 activeOrMaxChanged.notify_all();
347
- <a name="l00332"></a>00332 }
348
- <a name="l00333"></a>00333 } <span class="keywordflow">else</span> {
349
- <a name="l00334"></a>00334 <span class="keywordflow">while</span> (active &gt;= max) {
350
- <a name="l00335"></a>00335 activeOrMaxChanged.wait(l);
351
- <a name="l00336"></a>00336 }
352
- <a name="l00337"></a>00337 <span class="keywordflow">if</span> (count == max) {
353
- <a name="l00338"></a>00338 container = inactiveApps.front();
354
- <a name="l00339"></a>00339 inactiveApps.pop_front();
355
- <a name="l00340"></a>00340 list = apps[container-&gt;app-&gt;getAppRoot()].get();
356
- <a name="l00341"></a>00341 list-&gt;erase(container-&gt;iterator);
357
- <a name="l00342"></a>00342 <span class="keywordflow">if</span> (list-&gt;empty()) {
358
- <a name="l00343"></a>00343 apps.erase(container-&gt;app-&gt;getAppRoot());
359
- <a name="l00344"></a>00344 restartFileTimes.erase(container-&gt;app-&gt;getAppRoot());
360
- <a name="l00345"></a>00345 }
361
- <a name="l00346"></a>00346 count--;
362
- <a name="l00347"></a>00347 }
363
- <a name="l00348"></a>00348 container = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> AppContainer());
364
- <a name="l00349"></a>00349 container-&gt;app = spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#f60a88777284578f905e272122f4b8e6" title="Spawn a new instance of a Ruby on Rails application.">spawn</a>(appRoot, lowerPrivilege, lowestUser);
365
- <a name="l00350"></a>00350 container-&gt;sessions = 0;
366
- <a name="l00351"></a>00351 it = apps.find(appRoot);
367
- <a name="l00352"></a>00352 <span class="keywordflow">if</span> (it == apps.end()) {
368
- <a name="l00353"></a>00353 list = <span class="keyword">new</span> AppContainerList();
369
- <a name="l00354"></a>00354 apps[appRoot] = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(list);
370
- <a name="l00355"></a>00355 } <span class="keywordflow">else</span> {
371
- <a name="l00356"></a>00356 list = it-&gt;second.get();
372
- <a name="l00357"></a>00357 }
373
- <a name="l00358"></a>00358 list-&gt;push_back(container);
374
- <a name="l00359"></a>00359 container-&gt;iterator = list-&gt;end();
375
- <a name="l00360"></a>00360 container-&gt;iterator--;
376
- <a name="l00361"></a>00361 count++;
377
- <a name="l00362"></a>00362 active++;
378
- <a name="l00363"></a>00363 activeOrMaxChanged.notify_all();
379
- <a name="l00364"></a>00364 }
380
- <a name="l00365"></a>00365 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a> &amp;e) {
381
- <a name="l00366"></a>00366 <span class="keywordtype">string</span> message(<span class="stringliteral">"Cannot spawn application '"</span>);
382
- <a name="l00367"></a>00367 message.append(appRoot);
383
- <a name="l00368"></a>00368 message.append(<span class="stringliteral">"': "</span>);
384
- <a name="l00369"></a>00369 message.append(e.<a class="code" href="classPassenger_1_1SpawnException.html#d2da180f89a43423a4b37248249972ff">what</a>());
385
- <a name="l00370"></a>00370 <span class="keywordflow">if</span> (e.<a class="code" href="classPassenger_1_1SpawnException.html#e65dc272e183fd9e5637a4091cc6bbf4" title="Check whether an error page is available.">hasErrorPage</a>()) {
386
- <a name="l00371"></a>00371 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(message, e.<a class="code" href="classPassenger_1_1SpawnException.html#6f675a37edd7070875d0744e7dd010a1" title="Return the error page content.">getErrorPage</a>());
387
- <a name="l00372"></a>00372 } <span class="keywordflow">else</span> {
388
- <a name="l00373"></a>00373 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(message);
389
- <a name="l00374"></a>00374 }
390
- <a name="l00375"></a>00375 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &amp;e) {
391
- <a name="l00376"></a>00376 <span class="keywordtype">string</span> message(<span class="stringliteral">"Cannot spawn application '"</span>);
392
- <a name="l00377"></a>00377 message.append(appRoot);
393
- <a name="l00378"></a>00378 message.append(<span class="stringliteral">"': "</span>);
394
- <a name="l00379"></a>00379 message.append(e.what());
395
- <a name="l00380"></a>00380 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(message);
396
- <a name="l00381"></a>00381 }
397
- <a name="l00382"></a>00382
398
- <a name="l00383"></a>00383 <span class="keywordflow">return</span> make_pair(container, list);
399
- <a name="l00384"></a>00384 }
400
- <a name="l00385"></a>00385
401
- <a name="l00386"></a>00386 <span class="keyword">public</span>:<span class="comment"></span>
402
- <a name="l00387"></a>00387 <span class="comment"> /**</span>
403
- <a name="l00388"></a>00388 <span class="comment"> * Create a new StandardApplicationPool object.</span>
404
- <a name="l00389"></a>00389 <span class="comment"> *</span>
405
- <a name="l00390"></a>00390 <span class="comment"> * @param spawnServerCommand The filename of the spawn server to use.</span>
406
- <a name="l00391"></a>00391 <span class="comment"> * @param logFile Specify a log file that the spawn server should use.</span>
407
- <a name="l00392"></a>00392 <span class="comment"> * Messages on its standard output and standard error channels</span>
408
- <a name="l00393"></a>00393 <span class="comment"> * will be written to this log file. If an empty string is</span>
409
- <a name="l00394"></a>00394 <span class="comment"> * specified, no log file will be used, and the spawn server</span>
410
- <a name="l00395"></a>00395 <span class="comment"> * will use the same standard output/error channels as the</span>
411
- <a name="l00396"></a>00396 <span class="comment"> * current process.</span>
412
- <a name="l00397"></a>00397 <span class="comment"> * @param environment The RAILS_ENV environment that all RoR applications</span>
413
- <a name="l00398"></a>00398 <span class="comment"> * should use. If an empty string is specified, the current value</span>
414
- <a name="l00399"></a>00399 <span class="comment"> * of the RAILS_ENV environment variable will be used.</span>
415
- <a name="l00400"></a>00400 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
416
- <a name="l00401"></a>00401 <span class="comment"> * @param user The user that the spawn manager should run as. This</span>
417
- <a name="l00402"></a>00402 <span class="comment"> * parameter only has effect if the current process is</span>
418
- <a name="l00403"></a>00403 <span class="comment"> * running as root. If the empty string is given, or if</span>
419
- <a name="l00404"></a>00404 <span class="comment"> * the &lt;tt&gt;user&lt;/tt&gt; is not a valid username, then</span>
420
- <a name="l00405"></a>00405 <span class="comment"> * the spawn manager will be run as the current user.</span>
421
- <a name="l00406"></a>00406 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
422
- <a name="l00407"></a>00407 <span class="comment"> * @throws SystemException An error occured while trying to setup the spawn server.</span>
423
- <a name="l00408"></a>00408 <span class="comment"> * @throws IOException The specified log file could not be opened.</span>
424
- <a name="l00409"></a>00409 <span class="comment"> */</span>
425
- <a name="l00410"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#7ed2ba35cbbaeabbe11ce8598ca2f907">00410</a> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#7ed2ba35cbbaeabbe11ce8598ca2f907" title="Create a new StandardApplicationPool object.">StandardApplicationPool</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnServerCommand,
426
- <a name="l00411"></a>00411 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;logFile = <span class="stringliteral">""</span>,
427
- <a name="l00412"></a>00412 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;environment = <span class="stringliteral">"production"</span>,
428
- <a name="l00413"></a>00413 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;rubyCommand = <span class="stringliteral">"ruby"</span>,
429
- <a name="l00414"></a>00414 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;user = <span class="stringliteral">""</span>)
430
- <a name="l00415"></a>00415 :
431
- <a name="l00416"></a>00416 #ifndef PASSENGER_USE_DUMMY_SPAWN_MANAGER
432
- <a name="l00417"></a>00417 spawnManager(spawnServerCommand, logFile, environment, rubyCommand, user),
433
- <a name="l00418"></a>00418 #endif
434
- <a name="l00419"></a>00419 data(new SharedData()),
435
- <a name="l00420"></a>00420 lock(data-&gt;lock),
436
- <a name="l00421"></a>00421 activeOrMaxChanged(data-&gt;activeOrMaxChanged),
437
- <a name="l00422"></a>00422 apps(data-&gt;apps),
438
- <a name="l00423"></a>00423 max(data-&gt;max),
439
- <a name="l00424"></a>00424 count(data-&gt;count),
440
- <a name="l00425"></a>00425 active(data-&gt;active),
441
- <a name="l00426"></a>00426 inactiveApps(data-&gt;inactiveApps),
442
- <a name="l00427"></a>00427 restartFileTimes(data-&gt;restartFileTimes)
443
- <a name="l00428"></a>00428 {
444
- <a name="l00429"></a>00429 detached = <span class="keyword">false</span>;
445
- <a name="l00430"></a>00430 done = <span class="keyword">false</span>;
446
- <a name="l00431"></a>00431 max = DEFAULT_MAX_POOL_SIZE;
447
- <a name="l00432"></a>00432 count = 0;
448
- <a name="l00433"></a>00433 active = 0;
449
- <a name="l00434"></a>00434 maxIdleTime = DEFAULT_MAX_IDLE_TIME;
450
- <a name="l00435"></a>00435 cleanerThread = <span class="keyword">new</span> thread(bind(&amp;StandardApplicationPool::cleanerThreadMainLoop, <span class="keyword">this</span>));
451
- <a name="l00436"></a>00436 }
452
- <a name="l00437"></a>00437
453
- <a name="l00438"></a>00438 <span class="keyword">virtual</span> ~<a class="code" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a>() {
454
- <a name="l00439"></a>00439 <span class="keywordflow">if</span> (!detached) {
455
- <a name="l00440"></a>00440 {
456
- <a name="l00441"></a>00441 mutex::scoped_lock l(lock);
457
- <a name="l00442"></a>00442 done = <span class="keyword">true</span>;
458
- <a name="l00443"></a>00443 cleanerThreadSleeper.notify_one();
459
- <a name="l00444"></a>00444 }
460
- <a name="l00445"></a>00445 cleanerThread-&gt;join();
461
- <a name="l00446"></a>00446 }
462
- <a name="l00447"></a>00447 <span class="keyword">delete</span> cleanerThread;
463
- <a name="l00448"></a>00448 }
464
- <a name="l00449"></a>00449
465
- <a name="l00450"></a>00450 <span class="keyword">virtual</span> <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a>
466
- <a name="l00451"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#45cfa1878f1018f1626669cad9885caf">00451</a> <span class="keyword">get</span>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot, <span class="keywordtype">bool</span> lowerPrivilege = <span class="keyword">true</span>, <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;lowestUser = <span class="stringliteral">"nobody"</span>) {
467
- <a name="l00452"></a>00452 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> attempt;
468
- <a name="l00453"></a>00453 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_ATTEMPTS = 5;
469
- <a name="l00454"></a>00454
470
- <a name="l00455"></a>00455 attempt = 0;
471
- <a name="l00456"></a>00456 <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
472
- <a name="l00457"></a>00457 attempt++;
473
- <a name="l00458"></a>00458
474
- <a name="l00459"></a>00459 mutex::scoped_lock l(lock);
475
- <a name="l00460"></a>00460 pair&lt;AppContainerPtr, AppContainerList *&gt; p(
476
- <a name="l00461"></a>00461 spawnOrUseExisting(l, appRoot, lowerPrivilege, lowestUser)
477
- <a name="l00462"></a>00462 );
478
- <a name="l00463"></a>00463 AppContainerPtr &amp;container(p.first);
479
- <a name="l00464"></a>00464 AppContainerList &amp;list(*p.second);
480
- <a name="l00465"></a>00465
481
- <a name="l00466"></a>00466 container-&gt;lastUsed = time(NULL);
482
- <a name="l00467"></a>00467 container-&gt;sessions++;
483
- <a name="l00468"></a>00468 <span class="keywordflow">try</span> {
484
- <a name="l00469"></a>00469 <span class="keywordflow">return</span> container-&gt;app-&gt;connect(SessionCloseCallback(data, container));
485
- <a name="l00470"></a>00470 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &amp;e) {
486
- <a name="l00471"></a>00471 container-&gt;sessions--;
487
- <a name="l00472"></a>00472 <span class="keywordflow">if</span> (attempt == MAX_ATTEMPTS) {
488
- <a name="l00473"></a>00473 <span class="keywordtype">string</span> message(<span class="stringliteral">"Cannot connect to an existing application instance for '"</span>);
489
- <a name="l00474"></a>00474 message.append(appRoot);
490
- <a name="l00475"></a>00475 message.append(<span class="stringliteral">"': "</span>);
491
- <a name="l00476"></a>00476 <span class="keywordflow">try</span> {
492
- <a name="l00477"></a>00477 <span class="keyword">const</span> <a class="code" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a> &amp;syse = <span class="keyword">dynamic_cast&lt;</span><span class="keyword">const </span><a class="code" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a> &amp;<span class="keyword">&gt;</span>(e);
493
- <a name="l00478"></a>00478 message.append(syse.<a class="code" href="classPassenger_1_1SystemException.html#0ef41d755fea2c9b1db2252e7c418dc8" title="Returns the system&amp;#39;s error message.">sys</a>());
494
- <a name="l00479"></a>00479 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> bad_cast &amp;) {
495
- <a name="l00480"></a>00480 message.append(e.what());
496
- <a name="l00481"></a>00481 }
497
- <a name="l00482"></a>00482 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(message);
498
- <a name="l00483"></a>00483 } <span class="keywordflow">else</span> {
499
- <a name="l00484"></a>00484 list.erase(container-&gt;iterator);
500
- <a name="l00485"></a>00485 <span class="keywordflow">if</span> (list.empty()) {
501
- <a name="l00486"></a>00486 apps.erase(appRoot);
502
- <a name="l00487"></a>00487 }
503
- <a name="l00488"></a>00488 count--;
504
- <a name="l00489"></a>00489 active--;
505
- <a name="l00490"></a>00490 }
506
- <a name="l00491"></a>00491 }
507
- <a name="l00492"></a>00492 }
508
- <a name="l00493"></a>00493 <span class="comment">// Never reached; shut up compiler warning</span>
509
- <a name="l00494"></a>00494 <span class="keywordflow">return</span> <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a>();
510
- <a name="l00495"></a>00495 }
511
- <a name="l00496"></a>00496
512
- <a name="l00497"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08">00497</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08" title="Clear all application instances that are currently in the pool.">clear</a>() {
513
- <a name="l00498"></a>00498 mutex::scoped_lock l(lock);
514
- <a name="l00499"></a>00499 apps.clear();
515
- <a name="l00500"></a>00500 inactiveApps.clear();
516
- <a name="l00501"></a>00501 restartFileTimes.clear();
517
- <a name="l00502"></a>00502 count = 0;
518
- <a name="l00503"></a>00503 active = 0;
519
- <a name="l00504"></a>00504 }
520
- <a name="l00505"></a>00505
521
- <a name="l00506"></a>00506 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMaxIdleTime(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seconds) {
522
- <a name="l00507"></a>00507 mutex::scoped_lock l(lock);
523
- <a name="l00508"></a>00508 maxIdleTime = seconds;
524
- <a name="l00509"></a>00509 cleanerThreadSleeper.notify_one();
525
- <a name="l00510"></a>00510 }
526
- <a name="l00511"></a>00511
527
- <a name="l00512"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#04ef8c92da189520ad2022f4f82e9553">00512</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#04ef8c92da189520ad2022f4f82e9553" title="Set a hard limit on the number of application instances that this ApplicationPool...">setMax</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max) {
528
- <a name="l00513"></a>00513 mutex::scoped_lock l(lock);
529
- <a name="l00514"></a>00514 this-&gt;max = max;
530
- <a name="l00515"></a>00515 activeOrMaxChanged.notify_all();
531
- <a name="l00516"></a>00516 }
532
- <a name="l00517"></a>00517
533
- <a name="l00518"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#7773c4a3dfbd88eac72401d063831788">00518</a> <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#7773c4a3dfbd88eac72401d063831788" title="Get the number of active applications in the pool.">getActive</a>()<span class="keyword"> const </span>{
534
- <a name="l00519"></a>00519 <span class="keywordflow">return</span> active;
535
- <a name="l00520"></a>00520 }
536
- <a name="l00521"></a>00521
537
- <a name="l00522"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#cdbfe2b9ffacdab4438c879c2411bf02">00522</a> <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#cdbfe2b9ffacdab4438c879c2411bf02" title="Get the number of active applications in the pool.">getCount</a>()<span class="keyword"> const </span>{
538
- <a name="l00523"></a>00523 <span class="keywordflow">return</span> count;
539
- <a name="l00524"></a>00524 }
540
- <a name="l00525"></a>00525
541
- <a name="l00526"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660">00526</a> <span class="keyword">virtual</span> pid_t <a class="code" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660" title="Get the process ID of the spawn server that is used.">getSpawnServerPid</a>()<span class="keyword"> const </span>{
542
- <a name="l00527"></a>00527 <span class="keywordflow">return</span> spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#1f77e2e7e6cb464028c13a29f983ad8e" title="Get the Process ID of the spawn server.">getServerPid</a>();
543
- <a name="l00528"></a>00528 }
544
- <a name="l00529"></a>00529 };
545
- <a name="l00530"></a>00530
546
- <a name="l00531"></a>00531 } <span class="comment">// namespace Passenger</span>
547
- <a name="l00532"></a>00532
548
- <a name="l00533"></a>00533 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_STANDARD_APPLICATION_POOL_H_ */</span>
549
- <a name="l00534"></a>00534
550
- </pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Wed May 7 20:28:18 2008 for Passenger by&nbsp;
102
+ <a name="l00085"></a>00085 <span class="comment"> * (Of course, StandardApplicationPool &lt;em&gt;is&lt;/em&gt; usable if each process creates its own</span>
103
+ <a name="l00086"></a>00086 <span class="comment"> * StandardApplicationPool object, but that would defeat the point of having a shared pool.)</span>
104
+ <a name="l00087"></a>00087 <span class="comment"> *</span>
105
+ <a name="l00088"></a>00088 <span class="comment"> * For multi-process environments, one should use ApplicationPoolServer instead.</span>
106
+ <a name="l00089"></a>00089 <span class="comment"> *</span>
107
+ <a name="l00090"></a>00090 <span class="comment"> * @ingroup Support</span>
108
+ <a name="l00091"></a>00091 <span class="comment"> */</span>
109
+ <a name="l00092"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html">00092</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a>: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> {
110
+ <a name="l00093"></a>00093 <span class="keyword">private</span>:
111
+ <a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_MAX_IDLE_TIME = 120;
112
+ <a name="l00095"></a>00095 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_MAX_POOL_SIZE = 20;
113
+ <a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_MAX_INSTANCES_PER_APP = 0;
114
+ <a name="l00097"></a>00097 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> CLEANER_THREAD_STACK_SIZE = 1024 * 128;
115
+ <a name="l00098"></a>00098 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_GET_ATTEMPTS = 10;
116
+ <a name="l00099"></a>00099 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GET_TIMEOUT = 5000; <span class="comment">// In milliseconds.</span>
117
+ <a name="l00100"></a>00100
118
+ <a name="l00101"></a>00101 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a>;
119
+ <a name="l00102"></a>00102 <span class="keyword">struct </span>AppContainer;
120
+ <a name="l00103"></a>00103
121
+ <a name="l00104"></a>00104 <span class="keyword">typedef</span> shared_ptr&lt;AppContainer&gt; AppContainerPtr;
122
+ <a name="l00105"></a>00105 <span class="keyword">typedef</span> list&lt;AppContainerPtr&gt; AppContainerList;
123
+ <a name="l00106"></a>00106 <span class="keyword">typedef</span> shared_ptr&lt;AppContainerList&gt; AppContainerListPtr;
124
+ <a name="l00107"></a>00107 <span class="keyword">typedef</span> map&lt;string, AppContainerListPtr&gt; ApplicationMap;
125
+ <a name="l00108"></a>00108
126
+ <a name="l00109"></a>00109 <span class="keyword">struct </span>AppContainer {
127
+ <a name="l00110"></a>00110 <a class="code" href="namespacePassenger.html#6a15fd5e8765802a0b8b077e15297e18" title="Convenient alias for Application smart pointer.">ApplicationPtr</a> app;
128
+ <a name="l00111"></a>00111 time_t lastUsed;
129
+ <a name="l00112"></a>00112 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sessions;
130
+ <a name="l00113"></a>00113 AppContainerList::iterator iterator;
131
+ <a name="l00114"></a>00114 AppContainerList::iterator ia_iterator;
132
+ <a name="l00115"></a>00115 };
133
+ <a name="l00116"></a>00116
134
+ <a name="l00117"></a>00117 <span class="keyword">struct </span>SharedData {
135
+ <a name="l00118"></a>00118 mutex lock;
136
+ <a name="l00119"></a>00119 condition activeOrMaxChanged;
137
+ <a name="l00120"></a>00120
138
+ <a name="l00121"></a>00121 ApplicationMap apps;
139
+ <a name="l00122"></a>00122 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max;
140
+ <a name="l00123"></a>00123 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count;
141
+ <a name="l00124"></a>00124 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> active;
142
+ <a name="l00125"></a>00125 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxPerApp;
143
+ <a name="l00126"></a>00126 AppContainerList inactiveApps;
144
+ <a name="l00127"></a>00127 map&lt;string, time_t&gt; restartFileTimes;
145
+ <a name="l00128"></a>00128 map&lt;string, unsigned int&gt; appInstanceCount;
146
+ <a name="l00129"></a>00129 };
147
+ <a name="l00130"></a>00130
148
+ <a name="l00131"></a>00131 <span class="keyword">typedef</span> shared_ptr&lt;SharedData&gt; SharedDataPtr;
149
+ <a name="l00132"></a>00132
150
+ <a name="l00133"></a>00133 <span class="keyword">struct </span>SessionCloseCallback {
151
+ <a name="l00134"></a>00134 SharedDataPtr data;
152
+ <a name="l00135"></a>00135 weak_ptr&lt;AppContainer&gt; container;
153
+ <a name="l00136"></a>00136
154
+ <a name="l00137"></a>00137 SessionCloseCallback(SharedDataPtr data,
155
+ <a name="l00138"></a>00138 <span class="keyword">const</span> weak_ptr&lt;AppContainer&gt; &amp;container) {
156
+ <a name="l00139"></a>00139 this-&gt;data = data;
157
+ <a name="l00140"></a>00140 this-&gt;container = container;
158
+ <a name="l00141"></a>00141 }
159
+ <a name="l00142"></a>00142
160
+ <a name="l00143"></a>00143 <span class="keywordtype">void</span> operator()() {
161
+ <a name="l00144"></a>00144 mutex::scoped_lock l(data-&gt;lock);
162
+ <a name="l00145"></a>00145 AppContainerPtr container(this-&gt;container.lock());
163
+ <a name="l00146"></a>00146
164
+ <a name="l00147"></a>00147 <span class="keywordflow">if</span> (container == NULL) {
165
+ <a name="l00148"></a>00148 <span class="keywordflow">return</span>;
166
+ <a name="l00149"></a>00149 }
167
+ <a name="l00150"></a>00150
168
+ <a name="l00151"></a>00151 ApplicationMap::iterator it;
169
+ <a name="l00152"></a>00152 it = data-&gt;apps.find(container-&gt;app-&gt;getAppRoot());
170
+ <a name="l00153"></a>00153 <span class="keywordflow">if</span> (it != data-&gt;apps.end()) {
171
+ <a name="l00154"></a>00154 AppContainerListPtr list(it-&gt;second);
172
+ <a name="l00155"></a>00155 container-&gt;lastUsed = time(NULL);
173
+ <a name="l00156"></a>00156 container-&gt;sessions--;
174
+ <a name="l00157"></a>00157 <span class="keywordflow">if</span> (container-&gt;sessions == 0) {
175
+ <a name="l00158"></a>00158 list-&gt;erase(container-&gt;iterator);
176
+ <a name="l00159"></a>00159 list-&gt;push_front(container);
177
+ <a name="l00160"></a>00160 container-&gt;iterator = list-&gt;begin();
178
+ <a name="l00161"></a>00161 data-&gt;inactiveApps.push_back(container);
179
+ <a name="l00162"></a>00162 container-&gt;ia_iterator = data-&gt;inactiveApps.end();
180
+ <a name="l00163"></a>00163 container-&gt;ia_iterator--;
181
+ <a name="l00164"></a>00164 data-&gt;active--;
182
+ <a name="l00165"></a>00165 data-&gt;activeOrMaxChanged.notify_all();
183
+ <a name="l00166"></a>00166 }
184
+ <a name="l00167"></a>00167 }
185
+ <a name="l00168"></a>00168 }
186
+ <a name="l00169"></a>00169 };
187
+ <a name="l00170"></a>00170
188
+ <a name="l00171"></a>00171 <span class="preprocessor"> #ifdef PASSENGER_USE_DUMMY_SPAWN_MANAGER</span>
189
+ <a name="l00172"></a>00172 <span class="preprocessor"></span> <a class="code" href="classPassenger_1_1DummySpawnManager.html" title="A dummy SpawnManager replacement for testing/debugging purposes.">DummySpawnManager</a> spawnManager;
190
+ <a name="l00173"></a>00173 <span class="preprocessor"> #else</span>
191
+ <a name="l00174"></a>00174 <span class="preprocessor"></span> <a class="code" href="classPassenger_1_1SpawnManager.html" title="Spawning of Ruby on Rails/Rack application instances.">SpawnManager</a> spawnManager;
192
+ <a name="l00175"></a>00175 <span class="preprocessor"> #endif</span>
193
+ <a name="l00176"></a>00176 <span class="preprocessor"></span> SharedDataPtr data;
194
+ <a name="l00177"></a>00177 thread *cleanerThread;
195
+ <a name="l00178"></a>00178 <span class="keywordtype">bool</span> detached;
196
+ <a name="l00179"></a>00179 <span class="keywordtype">bool</span> done;
197
+ <a name="l00180"></a>00180 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxIdleTime;
198
+ <a name="l00181"></a>00181 condition cleanerThreadSleeper;
199
+ <a name="l00182"></a>00182
200
+ <a name="l00183"></a>00183 <span class="comment">// Shortcuts for instance variables in SharedData. Saves typing in get().</span>
201
+ <a name="l00184"></a>00184 mutex &amp;lock;
202
+ <a name="l00185"></a>00185 condition &amp;activeOrMaxChanged;
203
+ <a name="l00186"></a>00186 ApplicationMap &amp;apps;
204
+ <a name="l00187"></a>00187 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;max;
205
+ <a name="l00188"></a>00188 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;count;
206
+ <a name="l00189"></a>00189 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;active;
207
+ <a name="l00190"></a>00190 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;maxPerApp;
208
+ <a name="l00191"></a>00191 AppContainerList &amp;inactiveApps;
209
+ <a name="l00192"></a>00192 map&lt;string, time_t&gt; &amp;restartFileTimes;
210
+ <a name="l00193"></a>00193 map&lt;string, unsigned int&gt; &amp;appInstanceCount;
211
+ <a name="l00194"></a>00194 <span class="comment"></span>
212
+ <a name="l00195"></a>00195 <span class="comment"> /**</span>
213
+ <a name="l00196"></a>00196 <span class="comment"> * Verify that all the invariants are correct.</span>
214
+ <a name="l00197"></a>00197 <span class="comment"> */</span>
215
+ <a name="l00198"></a>00198 <span class="keywordtype">bool</span> <span class="keyword">inline</span> verifyState() {
216
+ <a name="l00199"></a>00199 <span class="preprocessor"> #if PASSENGER_DEBUG</span>
217
+ <a name="l00200"></a>00200 <span class="preprocessor"></span> <span class="comment">// Invariant for _apps_.</span>
218
+ <a name="l00201"></a>00201 ApplicationMap::const_iterator it;
219
+ <a name="l00202"></a>00202 <span class="keywordflow">for</span> (it = apps.begin(); it != apps.end(); it++) {
220
+ <a name="l00203"></a>00203 AppContainerList *list = it-&gt;second.get();
221
+ <a name="l00204"></a>00204 P_ASSERT(!list-&gt;empty(), <span class="keyword">false</span>, <span class="stringliteral">"List for '"</span> &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">"' is nonempty."</span>);
222
+ <a name="l00205"></a>00205
223
+ <a name="l00206"></a>00206 AppContainerList::const_iterator prev_lit;
224
+ <a name="l00207"></a>00207 AppContainerList::const_iterator lit;
225
+ <a name="l00208"></a>00208 prev_lit = list-&gt;begin();
226
+ <a name="l00209"></a>00209 lit = prev_lit;
227
+ <a name="l00210"></a>00210 lit++;
228
+ <a name="l00211"></a>00211 <span class="keywordflow">for</span> (; lit != list-&gt;end(); lit++) {
229
+ <a name="l00212"></a>00212 <span class="keywordflow">if</span> ((*prev_lit)-&gt;sessions &gt; 0) {
230
+ <a name="l00213"></a>00213 P_ASSERT((*lit)-&gt;sessions &gt; 0, <span class="keyword">false</span>,
231
+ <a name="l00214"></a>00214 <span class="stringliteral">"List for '"</span> &lt;&lt; it-&gt;first &lt;&lt;
232
+ <a name="l00215"></a>00215 <span class="stringliteral">"' is sorted from nonactive to active"</span>);
233
+ <a name="l00216"></a>00216 }
234
+ <a name="l00217"></a>00217 }
235
+ <a name="l00218"></a>00218 }
236
+ <a name="l00219"></a>00219
237
+ <a name="l00220"></a>00220 P_ASSERT(active &lt;= count, <span class="keyword">false</span>,
238
+ <a name="l00221"></a>00221 <span class="stringliteral">"active ("</span> &lt;&lt; active &lt;&lt; <span class="stringliteral">") &lt; count ("</span> &lt;&lt; count &lt;&lt; <span class="stringliteral">")"</span>);
239
+ <a name="l00222"></a>00222 P_ASSERT(inactiveApps.size() == count - active, <span class="keyword">false</span>,
240
+ <a name="l00223"></a>00223 <span class="stringliteral">"inactive_apps.size() == count - active"</span>);
241
+ <a name="l00224"></a>00224 <span class="preprocessor"> #endif</span>
242
+ <a name="l00225"></a>00225 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
243
+ <a name="l00226"></a>00226 }
244
+ <a name="l00227"></a>00227
245
+ <a name="l00228"></a>00228 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> LockActionType&gt;
246
+ <a name="l00229"></a>00229 <span class="keywordtype">string</span> toString(LockActionType lockAction)<span class="keyword"> const </span>{
247
+ <a name="l00230"></a>00230 unique_lock&lt;mutex&gt; l(lock, lockAction);
248
+ <a name="l00231"></a>00231 stringstream result;
249
+ <a name="l00232"></a>00232
250
+ <a name="l00233"></a>00233 result &lt;&lt; <span class="stringliteral">"----------- General information -----------"</span> &lt;&lt; endl;
251
+ <a name="l00234"></a>00234 result &lt;&lt; <span class="stringliteral">"max = "</span> &lt;&lt; max &lt;&lt; endl;
252
+ <a name="l00235"></a>00235 result &lt;&lt; <span class="stringliteral">"count = "</span> &lt;&lt; count &lt;&lt; endl;
253
+ <a name="l00236"></a>00236 result &lt;&lt; <span class="stringliteral">"active = "</span> &lt;&lt; active &lt;&lt; endl;
254
+ <a name="l00237"></a>00237 result &lt;&lt; <span class="stringliteral">"inactive = "</span> &lt;&lt; inactiveApps.size() &lt;&lt; endl;
255
+ <a name="l00238"></a>00238 result &lt;&lt; endl;
256
+ <a name="l00239"></a>00239
257
+ <a name="l00240"></a>00240 result &lt;&lt; <span class="stringliteral">"----------- Applications -----------"</span> &lt;&lt; endl;
258
+ <a name="l00241"></a>00241 ApplicationMap::const_iterator it;
259
+ <a name="l00242"></a>00242 <span class="keywordflow">for</span> (it = apps.begin(); it != apps.end(); it++) {
260
+ <a name="l00243"></a>00243 AppContainerList *list = it-&gt;second.get();
261
+ <a name="l00244"></a>00244 AppContainerList::const_iterator lit;
262
+ <a name="l00245"></a>00245
263
+ <a name="l00246"></a>00246 result &lt;&lt; it-&gt;first &lt;&lt; <span class="stringliteral">": "</span> &lt;&lt; endl;
264
+ <a name="l00247"></a>00247 <span class="keywordflow">for</span> (lit = list-&gt;begin(); lit != list-&gt;end(); lit++) {
265
+ <a name="l00248"></a>00248 AppContainer *container = lit-&gt;get();
266
+ <a name="l00249"></a>00249 <span class="keywordtype">char</span> buf[128];
267
+ <a name="l00250"></a>00250
268
+ <a name="l00251"></a>00251 snprintf(buf, <span class="keyword">sizeof</span>(buf), <span class="stringliteral">"PID: %-8d Sessions: %d"</span>,
269
+ <a name="l00252"></a>00252 container-&gt;app-&gt;getPid(), container-&gt;sessions);
270
+ <a name="l00253"></a>00253 result &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; buf &lt;&lt; endl;
271
+ <a name="l00254"></a>00254 }
272
+ <a name="l00255"></a>00255 result &lt;&lt; endl;
273
+ <a name="l00256"></a>00256 }
274
+ <a name="l00257"></a>00257 <span class="keywordflow">return</span> result.str();
275
+ <a name="l00258"></a>00258 }
276
+ <a name="l00259"></a>00259
277
+ <a name="l00260"></a>00260 <span class="keywordtype">bool</span> needsRestart(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot) {
278
+ <a name="l00261"></a>00261 <span class="keywordtype">string</span> restartFile(appRoot);
279
+ <a name="l00262"></a>00262 restartFile.append(<span class="stringliteral">"/tmp/restart.txt"</span>);
280
+ <a name="l00263"></a>00263
281
+ <a name="l00264"></a>00264 <span class="keyword">struct </span>stat buf;
282
+ <a name="l00265"></a>00265 <span class="keywordtype">bool</span> result;
283
+ <a name="l00266"></a>00266 <span class="keywordtype">int</span> ret;
284
+ <a name="l00267"></a>00267
285
+ <a name="l00268"></a>00268 <span class="keywordflow">do</span> {
286
+ <a name="l00269"></a>00269 ret = stat(restartFile.c_str(), &amp;buf);
287
+ <a name="l00270"></a>00270 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EINTR);
288
+ <a name="l00271"></a>00271 <span class="keywordflow">if</span> (ret == 0) {
289
+ <a name="l00272"></a>00272 <span class="keywordflow">do</span> {
290
+ <a name="l00273"></a>00273 ret = unlink(restartFile.c_str());
291
+ <a name="l00274"></a>00274 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; (errno == EINTR || errno == EAGAIN));
292
+ <a name="l00275"></a>00275 <span class="keywordflow">if</span> (ret == 0 || errno == ENOENT) {
293
+ <a name="l00276"></a>00276 restartFileTimes.erase(appRoot);
294
+ <a name="l00277"></a>00277 result = <span class="keyword">true</span>;
295
+ <a name="l00278"></a>00278 } <span class="keywordflow">else</span> {
296
+ <a name="l00279"></a>00279 map&lt;string, time_t&gt;::const_iterator it;
297
+ <a name="l00280"></a>00280
298
+ <a name="l00281"></a>00281 it = restartFileTimes.find(appRoot);
299
+ <a name="l00282"></a>00282 <span class="keywordflow">if</span> (it == restartFileTimes.end()) {
300
+ <a name="l00283"></a>00283 result = <span class="keyword">true</span>;
301
+ <a name="l00284"></a>00284 } <span class="keywordflow">else</span> {
302
+ <a name="l00285"></a>00285 result = buf.st_mtime != restartFileTimes[appRoot];
303
+ <a name="l00286"></a>00286 }
304
+ <a name="l00287"></a>00287 restartFileTimes[appRoot] = buf.st_mtime;
305
+ <a name="l00288"></a>00288 }
306
+ <a name="l00289"></a>00289 } <span class="keywordflow">else</span> {
307
+ <a name="l00290"></a>00290 restartFileTimes.erase(appRoot);
308
+ <a name="l00291"></a>00291 result = <span class="keyword">false</span>;
309
+ <a name="l00292"></a>00292 }
310
+ <a name="l00293"></a>00293 <span class="keywordflow">return</span> result;
311
+ <a name="l00294"></a>00294 }
312
+ <a name="l00295"></a>00295
313
+ <a name="l00296"></a>00296 <span class="keywordtype">void</span> cleanerThreadMainLoop() {
314
+ <a name="l00297"></a>00297 <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,...">this_thread::disable_syscall_interruption</a> dsi;
315
+ <a name="l00298"></a>00298 unique_lock&lt;mutex&gt; l(lock);
316
+ <a name="l00299"></a>00299 <span class="keywordflow">try</span> {
317
+ <a name="l00300"></a>00300 <span class="keywordflow">while</span> (!done &amp;&amp; !this_thread::interruption_requested()) {
318
+ <a name="l00301"></a>00301 xtime xt;
319
+ <a name="l00302"></a>00302 xtime_get(&amp;xt, TIME_UTC);
320
+ <a name="l00303"></a>00303 xt.sec += maxIdleTime + 1;
321
+ <a name="l00304"></a>00304 <span class="keywordflow">if</span> (cleanerThreadSleeper.timed_wait(l, xt)) {
322
+ <a name="l00305"></a>00305 <span class="comment">// Condition was woken up.</span>
323
+ <a name="l00306"></a>00306 <span class="keywordflow">if</span> (done) {
324
+ <a name="l00307"></a>00307 <span class="comment">// StandardApplicationPool is being destroyed.</span>
325
+ <a name="l00308"></a>00308 <span class="keywordflow">break</span>;
326
+ <a name="l00309"></a>00309 } <span class="keywordflow">else</span> {
327
+ <a name="l00310"></a>00310 <span class="comment">// maxIdleTime changed.</span>
328
+ <a name="l00311"></a>00311 <span class="keywordflow">continue</span>;
329
+ <a name="l00312"></a>00312 }
330
+ <a name="l00313"></a>00313 }
331
+ <a name="l00314"></a>00314
332
+ <a name="l00315"></a>00315 time_t now = InterruptableCalls::time(NULL);
333
+ <a name="l00316"></a>00316 AppContainerList::iterator it;
334
+ <a name="l00317"></a>00317 <span class="keywordflow">for</span> (it = inactiveApps.begin(); it != inactiveApps.end(); it++) {
335
+ <a name="l00318"></a>00318 AppContainer &amp;container(*it-&gt;get());
336
+ <a name="l00319"></a>00319 <a class="code" href="namespacePassenger.html#6a15fd5e8765802a0b8b077e15297e18" title="Convenient alias for Application smart pointer.">ApplicationPtr</a> app(container.app);
337
+ <a name="l00320"></a>00320 AppContainerListPtr appList(apps[app-&gt;getAppRoot()]);
338
+ <a name="l00321"></a>00321
339
+ <a name="l00322"></a>00322 <span class="keywordflow">if</span> (now - container.lastUsed &gt; (time_t) maxIdleTime) {
340
+ <a name="l00323"></a>00323 P_DEBUG(<span class="stringliteral">"Cleaning idle app "</span> &lt;&lt; app-&gt;getAppRoot() &lt;&lt;
341
+ <a name="l00324"></a>00324 <span class="stringliteral">" (PID "</span> &lt;&lt; app-&gt;getPid() &lt;&lt; <span class="stringliteral">")"</span>);
342
+ <a name="l00325"></a>00325 appList-&gt;erase(container.iterator);
343
+ <a name="l00326"></a>00326
344
+ <a name="l00327"></a>00327 AppContainerList::iterator prev = it;
345
+ <a name="l00328"></a>00328 prev--;
346
+ <a name="l00329"></a>00329 inactiveApps.erase(it);
347
+ <a name="l00330"></a>00330 it = prev;
348
+ <a name="l00331"></a>00331
349
+ <a name="l00332"></a>00332 appInstanceCount[app-&gt;getAppRoot()]--;
350
+ <a name="l00333"></a>00333
351
+ <a name="l00334"></a>00334 count--;
352
+ <a name="l00335"></a>00335 }
353
+ <a name="l00336"></a>00336 <span class="keywordflow">if</span> (appList-&gt;empty()) {
354
+ <a name="l00337"></a>00337 apps.erase(app-&gt;getAppRoot());
355
+ <a name="l00338"></a>00338 appInstanceCount.erase(app-&gt;getAppRoot());
356
+ <a name="l00339"></a>00339 data-&gt;restartFileTimes.erase(app-&gt;getAppRoot());
357
+ <a name="l00340"></a>00340 }
358
+ <a name="l00341"></a>00341 }
359
+ <a name="l00342"></a>00342 }
360
+ <a name="l00343"></a>00343 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &amp;e) {
361
+ <a name="l00344"></a>00344 P_ERROR(<span class="stringliteral">"Uncaught exception: "</span> &lt;&lt; e.what());
362
+ <a name="l00345"></a>00345 }
363
+ <a name="l00346"></a>00346 }
364
+ <a name="l00347"></a>00347 <span class="comment"></span>
365
+ <a name="l00348"></a>00348 <span class="comment"> /**</span>
366
+ <a name="l00349"></a>00349 <span class="comment"> * @throws boost::thread_interrupted</span>
367
+ <a name="l00350"></a>00350 <span class="comment"> * @throws SpawnException</span>
368
+ <a name="l00351"></a>00351 <span class="comment"> * @throws SystemException</span>
369
+ <a name="l00352"></a>00352 <span class="comment"> */</span>
370
+ <a name="l00353"></a>00353 pair&lt;AppContainerPtr, AppContainerList *&gt;
371
+ <a name="l00354"></a>00354 spawnOrUseExisting(
372
+ <a name="l00355"></a>00355 mutex::scoped_lock &amp;l,
373
+ <a name="l00356"></a>00356 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot,
374
+ <a name="l00357"></a>00357 <span class="keywordtype">bool</span> lowerPrivilege,
375
+ <a name="l00358"></a>00358 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;lowestUser,
376
+ <a name="l00359"></a>00359 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;environment,
377
+ <a name="l00360"></a>00360 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnMethod,
378
+ <a name="l00361"></a>00361 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appType
379
+ <a name="l00362"></a>00362 ) {
380
+ <a name="l00363"></a>00363 this_thread::disable_interruption di;
381
+ <a name="l00364"></a>00364 <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,...">this_thread::disable_syscall_interruption</a> dsi;
382
+ <a name="l00365"></a>00365 AppContainerPtr container;
383
+ <a name="l00366"></a>00366 AppContainerList *list;
384
+ <a name="l00367"></a>00367
385
+ <a name="l00368"></a>00368 <span class="keywordflow">try</span> {
386
+ <a name="l00369"></a>00369 ApplicationMap::iterator it(apps.find(appRoot));
387
+ <a name="l00370"></a>00370
388
+ <a name="l00371"></a>00371 <span class="keywordflow">if</span> (it != apps.end() &amp;&amp; needsRestart(appRoot)) {
389
+ <a name="l00372"></a>00372 AppContainerList::iterator it2;
390
+ <a name="l00373"></a>00373 list = it-&gt;second.get();
391
+ <a name="l00374"></a>00374 <span class="keywordflow">for</span> (it2 = list-&gt;begin(); it2 != list-&gt;end(); it2++) {
392
+ <a name="l00375"></a>00375 container = *it2;
393
+ <a name="l00376"></a>00376 <span class="keywordflow">if</span> (container-&gt;sessions == 0) {
394
+ <a name="l00377"></a>00377 inactiveApps.erase(container-&gt;ia_iterator);
395
+ <a name="l00378"></a>00378 } <span class="keywordflow">else</span> {
396
+ <a name="l00379"></a>00379 active--;
397
+ <a name="l00380"></a>00380 }
398
+ <a name="l00381"></a>00381 it2--;
399
+ <a name="l00382"></a>00382 list-&gt;erase(container-&gt;iterator);
400
+ <a name="l00383"></a>00383 count--;
401
+ <a name="l00384"></a>00384 }
402
+ <a name="l00385"></a>00385 apps.erase(appRoot);
403
+ <a name="l00386"></a>00386 appInstanceCount.erase(appRoot);
404
+ <a name="l00387"></a>00387 spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#2e85c43042b9556ca2fd74b8d28956ce" title="Remove the cached application instances at the given application root.">reload</a>(appRoot);
405
+ <a name="l00388"></a>00388 it = apps.end();
406
+ <a name="l00389"></a>00389 activeOrMaxChanged.notify_all();
407
+ <a name="l00390"></a>00390 }
408
+ <a name="l00391"></a>00391
409
+ <a name="l00392"></a>00392 <span class="keywordflow">if</span> (it != apps.end()) {
410
+ <a name="l00393"></a>00393 list = it-&gt;second.get();
411
+ <a name="l00394"></a>00394
412
+ <a name="l00395"></a>00395 <span class="keywordflow">if</span> (list-&gt;front()-&gt;sessions == 0) {
413
+ <a name="l00396"></a>00396 container = list-&gt;front();
414
+ <a name="l00397"></a>00397 list-&gt;pop_front();
415
+ <a name="l00398"></a>00398 list-&gt;push_back(container);
416
+ <a name="l00399"></a>00399 container-&gt;iterator = list-&gt;end();
417
+ <a name="l00400"></a>00400 container-&gt;iterator--;
418
+ <a name="l00401"></a>00401 inactiveApps.erase(container-&gt;ia_iterator);
419
+ <a name="l00402"></a>00402 active++;
420
+ <a name="l00403"></a>00403 activeOrMaxChanged.notify_all();
421
+ <a name="l00404"></a>00404 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (count &gt;= max || (
422
+ <a name="l00405"></a>00405 maxPerApp != 0 &amp;&amp; appInstanceCount[appRoot] &gt;= maxPerApp )
423
+ <a name="l00406"></a>00406 ) {
424
+ <a name="l00407"></a>00407 AppContainerList::iterator it(list-&gt;begin());
425
+ <a name="l00408"></a>00408 AppContainerList::iterator smallest(list-&gt;begin());
426
+ <a name="l00409"></a>00409 it++;
427
+ <a name="l00410"></a>00410 <span class="keywordflow">for</span> (; it != list-&gt;end(); it++) {
428
+ <a name="l00411"></a>00411 <span class="keywordflow">if</span> ((*it)-&gt;sessions &lt; (*smallest)-&gt;sessions) {
429
+ <a name="l00412"></a>00412 smallest = it;
430
+ <a name="l00413"></a>00413 }
431
+ <a name="l00414"></a>00414 }
432
+ <a name="l00415"></a>00415 container = *smallest;
433
+ <a name="l00416"></a>00416 list-&gt;erase(smallest);
434
+ <a name="l00417"></a>00417 list-&gt;push_back(container);
435
+ <a name="l00418"></a>00418 container-&gt;iterator = list-&gt;end();
436
+ <a name="l00419"></a>00419 container-&gt;iterator--;
437
+ <a name="l00420"></a>00420 } <span class="keywordflow">else</span> {
438
+ <a name="l00421"></a>00421 container = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> AppContainer());
439
+ <a name="l00422"></a>00422 {
440
+ <a name="l00423"></a>00423 this_thread::restore_interruption ri(di);
441
+ <a name="l00424"></a>00424 <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...">this_thread::restore_syscall_interruption</a> rsi(dsi);
442
+ <a name="l00425"></a>00425 container-&gt;app = spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#1bafa97204ea49a88b66272be3377d53" title="Spawn a new instance of a Ruby on Rails or Rack application.">spawn</a>(appRoot,
443
+ <a name="l00426"></a>00426 lowerPrivilege, lowestUser, environment,
444
+ <a name="l00427"></a>00427 spawnMethod, appType);
445
+ <a name="l00428"></a>00428 }
446
+ <a name="l00429"></a>00429 container-&gt;sessions = 0;
447
+ <a name="l00430"></a>00430 list-&gt;push_back(container);
448
+ <a name="l00431"></a>00431 container-&gt;iterator = list-&gt;end();
449
+ <a name="l00432"></a>00432 container-&gt;iterator--;
450
+ <a name="l00433"></a>00433 appInstanceCount[appRoot]++;
451
+ <a name="l00434"></a>00434 count++;
452
+ <a name="l00435"></a>00435 active++;
453
+ <a name="l00436"></a>00436 activeOrMaxChanged.notify_all();
454
+ <a name="l00437"></a>00437 }
455
+ <a name="l00438"></a>00438 } <span class="keywordflow">else</span> {
456
+ <a name="l00439"></a>00439 <span class="keywordflow">while</span> (!(
457
+ <a name="l00440"></a>00440 active &lt; max &amp;&amp;
458
+ <a name="l00441"></a>00441 (maxPerApp == 0 || appInstanceCount[appRoot] &lt; maxPerApp)
459
+ <a name="l00442"></a>00442 )) {
460
+ <a name="l00443"></a>00443 activeOrMaxChanged.wait(l);
461
+ <a name="l00444"></a>00444 }
462
+ <a name="l00445"></a>00445 <span class="keywordflow">if</span> (count == max) {
463
+ <a name="l00446"></a>00446 container = inactiveApps.front();
464
+ <a name="l00447"></a>00447 inactiveApps.pop_front();
465
+ <a name="l00448"></a>00448 list = apps[container-&gt;app-&gt;getAppRoot()].get();
466
+ <a name="l00449"></a>00449 list-&gt;erase(container-&gt;iterator);
467
+ <a name="l00450"></a>00450 <span class="keywordflow">if</span> (list-&gt;empty()) {
468
+ <a name="l00451"></a>00451 apps.erase(container-&gt;app-&gt;getAppRoot());
469
+ <a name="l00452"></a>00452 restartFileTimes.erase(container-&gt;app-&gt;getAppRoot());
470
+ <a name="l00453"></a>00453 appInstanceCount.erase(container-&gt;app-&gt;getAppRoot());
471
+ <a name="l00454"></a>00454 } <span class="keywordflow">else</span> {
472
+ <a name="l00455"></a>00455 appInstanceCount[container-&gt;app-&gt;getAppRoot()]--;
473
+ <a name="l00456"></a>00456 }
474
+ <a name="l00457"></a>00457 count--;
475
+ <a name="l00458"></a>00458 }
476
+ <a name="l00459"></a>00459 container = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> AppContainer());
477
+ <a name="l00460"></a>00460 {
478
+ <a name="l00461"></a>00461 this_thread::restore_interruption ri(di);
479
+ <a name="l00462"></a>00462 <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...">this_thread::restore_syscall_interruption</a> rsi(dsi);
480
+ <a name="l00463"></a>00463 container-&gt;app = spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#1bafa97204ea49a88b66272be3377d53" title="Spawn a new instance of a Ruby on Rails or Rack application.">spawn</a>(appRoot, lowerPrivilege, lowestUser,
481
+ <a name="l00464"></a>00464 environment, spawnMethod, appType);
482
+ <a name="l00465"></a>00465 }
483
+ <a name="l00466"></a>00466 container-&gt;sessions = 0;
484
+ <a name="l00467"></a>00467 it = apps.find(appRoot);
485
+ <a name="l00468"></a>00468 <span class="keywordflow">if</span> (it == apps.end()) {
486
+ <a name="l00469"></a>00469 list = <span class="keyword">new</span> AppContainerList();
487
+ <a name="l00470"></a>00470 apps[appRoot] = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(list);
488
+ <a name="l00471"></a>00471 appInstanceCount[appRoot] = 1;
489
+ <a name="l00472"></a>00472 } <span class="keywordflow">else</span> {
490
+ <a name="l00473"></a>00473 list = it-&gt;second.get();
491
+ <a name="l00474"></a>00474 appInstanceCount[appRoot]++;
492
+ <a name="l00475"></a>00475 }
493
+ <a name="l00476"></a>00476 list-&gt;push_back(container);
494
+ <a name="l00477"></a>00477 container-&gt;iterator = list-&gt;end();
495
+ <a name="l00478"></a>00478 container-&gt;iterator--;
496
+ <a name="l00479"></a>00479 count++;
497
+ <a name="l00480"></a>00480 active++;
498
+ <a name="l00481"></a>00481 activeOrMaxChanged.notify_all();
499
+ <a name="l00482"></a>00482 }
500
+ <a name="l00483"></a>00483 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a> &amp;e) {
501
+ <a name="l00484"></a>00484 <span class="keywordtype">string</span> message(<span class="stringliteral">"Cannot spawn application '"</span>);
502
+ <a name="l00485"></a>00485 message.append(appRoot);
503
+ <a name="l00486"></a>00486 message.append(<span class="stringliteral">"': "</span>);
504
+ <a name="l00487"></a>00487 message.append(e.<a class="code" href="classPassenger_1_1SpawnException.html#d2da180f89a43423a4b37248249972ff">what</a>());
505
+ <a name="l00488"></a>00488 <span class="keywordflow">if</span> (e.<a class="code" href="classPassenger_1_1SpawnException.html#e65dc272e183fd9e5637a4091cc6bbf4" title="Check whether an error page is available.">hasErrorPage</a>()) {
506
+ <a name="l00489"></a>00489 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(message, e.<a class="code" href="classPassenger_1_1SpawnException.html#6f675a37edd7070875d0744e7dd010a1" title="Return the error page content.">getErrorPage</a>());
507
+ <a name="l00490"></a>00490 } <span class="keywordflow">else</span> {
508
+ <a name="l00491"></a>00491 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(message);
509
+ <a name="l00492"></a>00492 }
510
+ <a name="l00493"></a>00493 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &amp;e) {
511
+ <a name="l00494"></a>00494 <span class="keywordtype">string</span> message(<span class="stringliteral">"Cannot spawn application '"</span>);
512
+ <a name="l00495"></a>00495 message.append(appRoot);
513
+ <a name="l00496"></a>00496 message.append(<span class="stringliteral">"': "</span>);
514
+ <a name="l00497"></a>00497 message.append(e.what());
515
+ <a name="l00498"></a>00498 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(message);
516
+ <a name="l00499"></a>00499 }
517
+ <a name="l00500"></a>00500
518
+ <a name="l00501"></a>00501 <span class="keywordflow">return</span> make_pair(container, list);
519
+ <a name="l00502"></a>00502 }
520
+ <a name="l00503"></a>00503
521
+ <a name="l00504"></a>00504 <span class="keyword">public</span>:<span class="comment"></span>
522
+ <a name="l00505"></a>00505 <span class="comment"> /**</span>
523
+ <a name="l00506"></a>00506 <span class="comment"> * Create a new StandardApplicationPool object.</span>
524
+ <a name="l00507"></a>00507 <span class="comment"> *</span>
525
+ <a name="l00508"></a>00508 <span class="comment"> * @param spawnServerCommand The filename of the spawn server to use.</span>
526
+ <a name="l00509"></a>00509 <span class="comment"> * @param logFile Specify a log file that the spawn server should use.</span>
527
+ <a name="l00510"></a>00510 <span class="comment"> * Messages on its standard output and standard error channels</span>
528
+ <a name="l00511"></a>00511 <span class="comment"> * will be written to this log file. If an empty string is</span>
529
+ <a name="l00512"></a>00512 <span class="comment"> * specified, no log file will be used, and the spawn server</span>
530
+ <a name="l00513"></a>00513 <span class="comment"> * will use the same standard output/error channels as the</span>
531
+ <a name="l00514"></a>00514 <span class="comment"> * current process.</span>
532
+ <a name="l00515"></a>00515 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
533
+ <a name="l00516"></a>00516 <span class="comment"> * @param user The user that the spawn manager should run as. This</span>
534
+ <a name="l00517"></a>00517 <span class="comment"> * parameter only has effect if the current process is</span>
535
+ <a name="l00518"></a>00518 <span class="comment"> * running as root. If the empty string is given, or if</span>
536
+ <a name="l00519"></a>00519 <span class="comment"> * the &lt;tt&gt;user&lt;/tt&gt; is not a valid username, then</span>
537
+ <a name="l00520"></a>00520 <span class="comment"> * the spawn manager will be run as the current user.</span>
538
+ <a name="l00521"></a>00521 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
539
+ <a name="l00522"></a>00522 <span class="comment"> * @throws SystemException An error occured while trying to setup the spawn server.</span>
540
+ <a name="l00523"></a>00523 <span class="comment"> * @throws IOException The specified log file could not be opened.</span>
541
+ <a name="l00524"></a>00524 <span class="comment"> */</span>
542
+ <a name="l00525"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#f175704fc477f37ba1d387be09fa2e6b">00525</a> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#f175704fc477f37ba1d387be09fa2e6b" title="Create a new StandardApplicationPool object.">StandardApplicationPool</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnServerCommand,
543
+ <a name="l00526"></a>00526 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;logFile = <span class="stringliteral">""</span>,
544
+ <a name="l00527"></a>00527 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;rubyCommand = <span class="stringliteral">"ruby"</span>,
545
+ <a name="l00528"></a>00528 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;user = <span class="stringliteral">""</span>)
546
+ <a name="l00529"></a>00529 :
547
+ <a name="l00530"></a>00530 #ifndef PASSENGER_USE_DUMMY_SPAWN_MANAGER
548
+ <a name="l00531"></a>00531 spawnManager(spawnServerCommand, logFile, rubyCommand, user),
549
+ <a name="l00532"></a>00532 #endif
550
+ <a name="l00533"></a>00533 data(new SharedData()),
551
+ <a name="l00534"></a>00534 lock(data-&gt;lock),
552
+ <a name="l00535"></a>00535 activeOrMaxChanged(data-&gt;activeOrMaxChanged),
553
+ <a name="l00536"></a>00536 apps(data-&gt;apps),
554
+ <a name="l00537"></a>00537 max(data-&gt;max),
555
+ <a name="l00538"></a>00538 count(data-&gt;count),
556
+ <a name="l00539"></a>00539 active(data-&gt;active),
557
+ <a name="l00540"></a>00540 maxPerApp(data-&gt;maxPerApp),
558
+ <a name="l00541"></a>00541 inactiveApps(data-&gt;inactiveApps),
559
+ <a name="l00542"></a>00542 restartFileTimes(data-&gt;restartFileTimes),
560
+ <a name="l00543"></a>00543 appInstanceCount(data-&gt;appInstanceCount)
561
+ <a name="l00544"></a>00544 {
562
+ <a name="l00545"></a>00545 detached = <span class="keyword">false</span>;
563
+ <a name="l00546"></a>00546 done = <span class="keyword">false</span>;
564
+ <a name="l00547"></a>00547 max = DEFAULT_MAX_POOL_SIZE;
565
+ <a name="l00548"></a>00548 count = 0;
566
+ <a name="l00549"></a>00549 active = 0;
567
+ <a name="l00550"></a>00550 maxPerApp = DEFAULT_MAX_INSTANCES_PER_APP;
568
+ <a name="l00551"></a>00551 maxIdleTime = DEFAULT_MAX_IDLE_TIME;
569
+ <a name="l00552"></a>00552 cleanerThread = <span class="keyword">new</span> thread(
570
+ <a name="l00553"></a>00553 bind(&amp;StandardApplicationPool::cleanerThreadMainLoop, <span class="keyword">this</span>),
571
+ <a name="l00554"></a>00554 CLEANER_THREAD_STACK_SIZE
572
+ <a name="l00555"></a>00555 );
573
+ <a name="l00556"></a>00556 }
574
+ <a name="l00557"></a>00557
575
+ <a name="l00558"></a>00558 <span class="keyword">virtual</span> ~<a class="code" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a>() {
576
+ <a name="l00559"></a>00559 <span class="keywordflow">if</span> (!detached) {
577
+ <a name="l00560"></a>00560 this_thread::disable_interruption di;
578
+ <a name="l00561"></a>00561 {
579
+ <a name="l00562"></a>00562 mutex::scoped_lock l(lock);
580
+ <a name="l00563"></a>00563 done = <span class="keyword">true</span>;
581
+ <a name="l00564"></a>00564 cleanerThreadSleeper.notify_one();
582
+ <a name="l00565"></a>00565 }
583
+ <a name="l00566"></a>00566 cleanerThread-&gt;join();
584
+ <a name="l00567"></a>00567 }
585
+ <a name="l00568"></a>00568 <span class="keyword">delete</span> cleanerThread;
586
+ <a name="l00569"></a>00569 }
587
+ <a name="l00570"></a>00570
588
+ <a name="l00571"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#0dcdd88c39d7f1a1d667e24c3cb9b243">00571</a> <span class="keyword">virtual</span> <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> <span class="keyword">get</span>(
589
+ <a name="l00572"></a>00572 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot,
590
+ <a name="l00573"></a>00573 <span class="keywordtype">bool</span> lowerPrivilege = <span class="keyword">true</span>,
591
+ <a name="l00574"></a>00574 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;lowestUser = <span class="stringliteral">"nobody"</span>,
592
+ <a name="l00575"></a>00575 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;environment = <span class="stringliteral">"production"</span>,
593
+ <a name="l00576"></a>00576 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnMethod = <span class="stringliteral">"smart"</span>,
594
+ <a name="l00577"></a>00577 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appType = <span class="stringliteral">"rails"</span>
595
+ <a name="l00578"></a>00578 ) {
596
+ <a name="l00579"></a>00579 <span class="keyword">using namespace </span>boost::posix_time;
597
+ <a name="l00580"></a>00580 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> attempt = 0;
598
+ <a name="l00581"></a>00581 ptime timeLimit(get_system_time() + millisec(GET_TIMEOUT));
599
+ <a name="l00582"></a>00582 unique_lock&lt;mutex&gt; l(lock);
600
+ <a name="l00583"></a>00583
601
+ <a name="l00584"></a>00584 <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
602
+ <a name="l00585"></a>00585 attempt++;
603
+ <a name="l00586"></a>00586
604
+ <a name="l00587"></a>00587 pair&lt;AppContainerPtr, AppContainerList *&gt; p(
605
+ <a name="l00588"></a>00588 spawnOrUseExisting(l, appRoot, lowerPrivilege, lowestUser,
606
+ <a name="l00589"></a>00589 environment, spawnMethod, appType)
607
+ <a name="l00590"></a>00590 );
608
+ <a name="l00591"></a>00591 AppContainerPtr &amp;container(p.first);
609
+ <a name="l00592"></a>00592 AppContainerList &amp;list(*p.second);
610
+ <a name="l00593"></a>00593
611
+ <a name="l00594"></a>00594 container-&gt;lastUsed = time(NULL);
612
+ <a name="l00595"></a>00595 container-&gt;sessions++;
613
+ <a name="l00596"></a>00596
614
+ <a name="l00597"></a>00597 P_ASSERT(verifyState(), <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a>(),
615
+ <a name="l00598"></a>00598 <span class="stringliteral">"State is valid:\n"</span> &lt;&lt; <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(<span class="keyword">false</span>));
616
+ <a name="l00599"></a>00599 <span class="keywordflow">try</span> {
617
+ <a name="l00600"></a>00600 <span class="keywordflow">return</span> container-&gt;app-&gt;connect(SessionCloseCallback(data, container));
618
+ <a name="l00601"></a>00601 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &amp;e) {
619
+ <a name="l00602"></a>00602 container-&gt;sessions--;
620
+ <a name="l00603"></a>00603 <span class="keywordflow">if</span> (attempt == MAX_GET_ATTEMPTS) {
621
+ <a name="l00604"></a>00604 <span class="keywordtype">string</span> message(<span class="stringliteral">"Cannot connect to an existing "</span>
622
+ <a name="l00605"></a>00605 <span class="stringliteral">"application instance for '"</span>);
623
+ <a name="l00606"></a>00606 message.append(appRoot);
624
+ <a name="l00607"></a>00607 message.append(<span class="stringliteral">"': "</span>);
625
+ <a name="l00608"></a>00608 <span class="keywordflow">try</span> {
626
+ <a name="l00609"></a>00609 <span class="keyword">const</span> <a class="code" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a> &amp;syse =
627
+ <a name="l00610"></a>00610 <span class="keyword">dynamic_cast&lt;</span><span class="keyword">const </span><a class="code" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a> &amp;<span class="keyword">&gt;</span>(e);
628
+ <a name="l00611"></a>00611 message.append(syse.<a class="code" href="classPassenger_1_1SystemException.html#0ef41d755fea2c9b1db2252e7c418dc8" title="Returns the system&amp;#39;s error message.">sys</a>());
629
+ <a name="l00612"></a>00612 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> bad_cast &amp;) {
630
+ <a name="l00613"></a>00613 message.append(e.what());
631
+ <a name="l00614"></a>00614 }
632
+ <a name="l00615"></a>00615 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(message);
633
+ <a name="l00616"></a>00616 } <span class="keywordflow">else</span> {
634
+ <a name="l00617"></a>00617 list.erase(container-&gt;iterator);
635
+ <a name="l00618"></a>00618 <span class="keywordflow">if</span> (list.empty()) {
636
+ <a name="l00619"></a>00619 apps.erase(appRoot);
637
+ <a name="l00620"></a>00620 appInstanceCount.erase(appRoot);
638
+ <a name="l00621"></a>00621 }
639
+ <a name="l00622"></a>00622 count--;
640
+ <a name="l00623"></a>00623 active--;
641
+ <a name="l00624"></a>00624 activeOrMaxChanged.notify_all();
642
+ <a name="l00625"></a>00625 P_ASSERT(verifyState(), <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a>(),
643
+ <a name="l00626"></a>00626 <span class="stringliteral">"State is valid."</span>);
644
+ <a name="l00627"></a>00627 }
645
+ <a name="l00628"></a>00628 }
646
+ <a name="l00629"></a>00629 }
647
+ <a name="l00630"></a>00630 <span class="comment">// Never reached; shut up compiler warning</span>
648
+ <a name="l00631"></a>00631 <span class="keywordflow">return</span> <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a>();
649
+ <a name="l00632"></a>00632 }
650
+ <a name="l00633"></a>00633
651
+ <a name="l00634"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08">00634</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08" title="Clear all application instances that are currently in the pool.">clear</a>() {
652
+ <a name="l00635"></a>00635 mutex::scoped_lock l(lock);
653
+ <a name="l00636"></a>00636 apps.clear();
654
+ <a name="l00637"></a>00637 inactiveApps.clear();
655
+ <a name="l00638"></a>00638 restartFileTimes.clear();
656
+ <a name="l00639"></a>00639 appInstanceCount.clear();
657
+ <a name="l00640"></a>00640 count = 0;
658
+ <a name="l00641"></a>00641 active = 0;
659
+ <a name="l00642"></a>00642 }
660
+ <a name="l00643"></a>00643
661
+ <a name="l00644"></a>00644 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMaxIdleTime(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seconds) {
662
+ <a name="l00645"></a>00645 mutex::scoped_lock l(lock);
663
+ <a name="l00646"></a>00646 maxIdleTime = seconds;
664
+ <a name="l00647"></a>00647 cleanerThreadSleeper.notify_one();
665
+ <a name="l00648"></a>00648 }
666
+ <a name="l00649"></a>00649
667
+ <a name="l00650"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#04ef8c92da189520ad2022f4f82e9553">00650</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#04ef8c92da189520ad2022f4f82e9553" title="Set a hard limit on the number of application instances that this ApplicationPool...">setMax</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max) {
668
+ <a name="l00651"></a>00651 mutex::scoped_lock l(lock);
669
+ <a name="l00652"></a>00652 this-&gt;max = max;
670
+ <a name="l00653"></a>00653 activeOrMaxChanged.notify_all();
671
+ <a name="l00654"></a>00654 }
672
+ <a name="l00655"></a>00655
673
+ <a name="l00656"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#7773c4a3dfbd88eac72401d063831788">00656</a> <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#7773c4a3dfbd88eac72401d063831788" title="Get the number of active applications in the pool.">getActive</a>()<span class="keyword"> const </span>{
674
+ <a name="l00657"></a>00657 <span class="keywordflow">return</span> active;
675
+ <a name="l00658"></a>00658 }
676
+ <a name="l00659"></a>00659
677
+ <a name="l00660"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#cdbfe2b9ffacdab4438c879c2411bf02">00660</a> <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#cdbfe2b9ffacdab4438c879c2411bf02" title="Get the number of active applications in the pool.">getCount</a>()<span class="keyword"> const </span>{
678
+ <a name="l00661"></a>00661 <span class="keywordflow">return</span> count;
679
+ <a name="l00662"></a>00662 }
680
+ <a name="l00663"></a>00663
681
+ <a name="l00664"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#3bafcda8d880f70561ad8a9da16e26ef">00664</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1StandardApplicationPool.html#3bafcda8d880f70561ad8a9da16e26ef" title="Set a hard limit on the number of application instances that a single application...">setMaxPerApp</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxPerApp) {
682
+ <a name="l00665"></a>00665 mutex::scoped_lock l(lock);
683
+ <a name="l00666"></a>00666 this-&gt;maxPerApp = maxPerApp;
684
+ <a name="l00667"></a>00667 activeOrMaxChanged.notify_all();
685
+ <a name="l00668"></a>00668 }
686
+ <a name="l00669"></a>00669
687
+ <a name="l00670"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660">00670</a> <span class="keyword">virtual</span> pid_t <a class="code" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660" title="Get the process ID of the spawn server that is used.">getSpawnServerPid</a>()<span class="keyword"> const </span>{
688
+ <a name="l00671"></a>00671 <span class="keywordflow">return</span> spawnManager.<a class="code" href="classPassenger_1_1SpawnManager.html#1f77e2e7e6cb464028c13a29f983ad8e" title="Get the Process ID of the spawn server.">getServerPid</a>();
689
+ <a name="l00672"></a>00672 }
690
+ <a name="l00673"></a>00673 <span class="comment"></span>
691
+ <a name="l00674"></a>00674 <span class="comment"> /**</span>
692
+ <a name="l00675"></a>00675 <span class="comment"> * Returns a textual description of the internal state of</span>
693
+ <a name="l00676"></a>00676 <span class="comment"> * the application pool.</span>
694
+ <a name="l00677"></a>00677 <span class="comment"> */</span>
695
+ <a name="l00678"></a><a class="code" href="classPassenger_1_1StandardApplicationPool.html#22b4149ca8256c3042fc342e681b0383">00678</a> <span class="keyword">virtual</span> <span class="keywordtype">string</span> <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(<span class="keywordtype">bool</span> lockMutex = <span class="keyword">true</span>)<span class="keyword"> const </span>{
696
+ <a name="l00679"></a>00679 <span class="keywordflow">if</span> (lockMutex) {
697
+ <a name="l00680"></a>00680 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(boost::adopt_lock);
698
+ <a name="l00681"></a>00681 } <span class="keywordflow">else</span> {
699
+ <a name="l00682"></a>00682 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(boost::defer_lock);
700
+ <a name="l00683"></a>00683 }
701
+ <a name="l00684"></a>00684 }
702
+ <a name="l00685"></a>00685 };
703
+ <a name="l00686"></a>00686
704
+ <a name="l00687"></a>00687 } <span class="comment">// namespace Passenger</span>
705
+ <a name="l00688"></a>00688
706
+ <a name="l00689"></a>00689 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_STANDARD_APPLICATION_POOL_H_ */</span>
707
+ <a name="l00690"></a>00690
708
+ </pre></div></div>
709
+ <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 24 14:03:42 2008 for Passenger by&nbsp;
551
710
  <a href="http://www.doxygen.org/index.html">
552
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
711
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
553
712
  </body>
554
713
  </html>