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,543 +4,674 @@
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>ApplicationPoolServer.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_APPLICATION_POOL_SERVER_H_</span>
34
- <a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_APPLICATION_POOL_SERVER_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
38
- <a name="l00023"></a>00023 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
39
- <a name="l00024"></a>00024 <span class="preprocessor">#include &lt;sys/wait.h&gt;</span>
40
- <a name="l00025"></a>00025 <span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
41
- <a name="l00026"></a>00026 <span class="preprocessor">#include &lt;cstdlib&gt;</span>
42
- <a name="l00027"></a>00027 <span class="preprocessor">#include &lt;errno.h&gt;</span>
43
- <a name="l00028"></a>00028 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
44
- <a name="l00029"></a>00029 <span class="preprocessor">#include &lt;signal.h&gt;</span>
45
- <a name="l00030"></a>00030
46
- <a name="l00031"></a>00031 <span class="preprocessor">#include "MessageChannel.h"</span>
47
- <a name="l00032"></a>00032 <span class="preprocessor">#include "ApplicationPool.h"</span>
48
- <a name="l00033"></a>00033 <span class="preprocessor">#include "Application.h"</span>
49
- <a name="l00034"></a>00034 <span class="preprocessor">#include "Exceptions.h"</span>
50
- <a name="l00035"></a>00035 <span class="preprocessor">#include "Logging.h"</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_APPLICATION_POOL_SERVER_H_</span>
38
+ <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_APPLICATION_POOL_SERVER_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/thread/mutex.hpp&gt;</span>
42
+ <a name="l00025"></a>00025
43
+ <a name="l00026"></a>00026 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
44
+ <a name="l00027"></a>00027 <span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
45
+ <a name="l00028"></a>00028 <span class="preprocessor">#include &lt;sys/wait.h&gt;</span>
46
+ <a name="l00029"></a>00029 <span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
47
+ <a name="l00030"></a>00030 <span class="preprocessor">#include &lt;cstdio&gt;</span>
48
+ <a name="l00031"></a>00031 <span class="preprocessor">#include &lt;cstdlib&gt;</span>
49
+ <a name="l00032"></a>00032 <span class="preprocessor">#include &lt;limits.h&gt;</span>
50
+ <a name="l00033"></a>00033 <span class="preprocessor">#include &lt;errno.h&gt;</span>
51
+ <a name="l00034"></a>00034 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
52
+ <a name="l00035"></a>00035 <span class="preprocessor">#include &lt;signal.h&gt;</span>
51
53
  <a name="l00036"></a>00036
52
- <a name="l00037"></a>00037 <span class="keyword">namespace </span>Passenger {
53
- <a name="l00038"></a>00038
54
- <a name="l00039"></a>00039 <span class="keyword">using namespace </span>std;
55
- <a name="l00040"></a>00040 <span class="keyword">using namespace </span>boost;
56
- <a name="l00041"></a>00041
57
- <a name="l00042"></a>00042 <span class="comment"></span>
58
- <a name="l00043"></a>00043 <span class="comment">/**</span>
59
- <a name="l00044"></a>00044 <span class="comment"> * Multi-process usage support for ApplicationPool.</span>
60
- <a name="l00045"></a>00045 <span class="comment"> *</span>
61
- <a name="l00046"></a>00046 <span class="comment"> * ApplicationPoolServer implements a client/server architecture for ApplicationPool.</span>
62
- <a name="l00047"></a>00047 <span class="comment"> * This allows one to use ApplicationPool in a multi-process environment (unlike</span>
63
- <a name="l00048"></a>00048 <span class="comment"> * StandardApplicationPool). The cache/pool data is stored in the server. Different</span>
64
- <a name="l00049"></a>00049 <span class="comment"> * processes can then access the pool through the server.</span>
65
- <a name="l00050"></a>00050 <span class="comment"> *</span>
66
- <a name="l00051"></a>00051 <span class="comment"> * ApplicationPoolServer itself does not inherit ApplicationPool. Instead, it returns</span>
67
- <a name="l00052"></a>00052 <span class="comment"> * an ApplicationPool object via the connect() call. For example:</span>
68
- <a name="l00053"></a>00053 <span class="comment"> * @code</span>
69
- <a name="l00054"></a>00054 <span class="comment"> * // Create an ApplicationPoolServer.</span>
70
- <a name="l00055"></a>00055 <span class="comment"> * ApplicationPoolServer server(...);</span>
71
- <a name="l00056"></a>00056 <span class="comment"> * </span>
72
- <a name="l00057"></a>00057 <span class="comment"> * // Now fork a child process, like Apache's prefork MPM eventually will.</span>
73
- <a name="l00058"></a>00058 <span class="comment"> * pid_t pid = fork();</span>
74
- <a name="l00059"></a>00059 <span class="comment"> * if (pid == 0) {</span>
75
- <a name="l00060"></a>00060 <span class="comment"> * // Child process</span>
76
- <a name="l00061"></a>00061 <span class="comment"> * </span>
77
- <a name="l00062"></a>00062 <span class="comment"> * // Connect to the server. After connection, we have an ApplicationPool</span>
78
- <a name="l00063"></a>00063 <span class="comment"> * // object!</span>
79
- <a name="l00064"></a>00064 <span class="comment"> * ApplicationPoolPtr pool(server.connect());</span>
80
- <a name="l00065"></a>00065 <span class="comment"> *</span>
81
- <a name="l00066"></a>00066 <span class="comment"> * // We don't need to connect to the server anymore, so we detach from it.</span>
82
- <a name="l00067"></a>00067 <span class="comment"> * // This frees up some resources, such as file descriptors.</span>
83
- <a name="l00068"></a>00068 <span class="comment"> * server.detach();</span>
84
- <a name="l00069"></a>00069 <span class="comment"> *</span>
85
- <a name="l00070"></a>00070 <span class="comment"> * ApplicationPool::SessionPtr session(pool-&gt;get("/home/webapps/foo"));</span>
86
- <a name="l00071"></a>00071 <span class="comment"> * do_something_with(session);</span>
54
+ <a name="l00037"></a>00037 <span class="preprocessor">#include "MessageChannel.h"</span>
55
+ <a name="l00038"></a>00038 <span class="preprocessor">#include "ApplicationPool.h"</span>
56
+ <a name="l00039"></a>00039 <span class="preprocessor">#include "Application.h"</span>
57
+ <a name="l00040"></a>00040 <span class="preprocessor">#include "Exceptions.h"</span>
58
+ <a name="l00041"></a>00041 <span class="preprocessor">#include "Logging.h"</span>
59
+ <a name="l00042"></a>00042 <span class="preprocessor">#include "System.h"</span>
60
+ <a name="l00043"></a>00043
61
+ <a name="l00044"></a>00044 <span class="keyword">namespace </span>Passenger {
62
+ <a name="l00045"></a>00045
63
+ <a name="l00046"></a>00046 <span class="keyword">using namespace </span>std;
64
+ <a name="l00047"></a>00047 <span class="keyword">using namespace </span>boost;
65
+ <a name="l00048"></a>00048
66
+ <a name="l00049"></a>00049 <span class="comment"></span>
67
+ <a name="l00050"></a>00050 <span class="comment">/**</span>
68
+ <a name="l00051"></a>00051 <span class="comment"> * Multi-process usage support for ApplicationPool.</span>
69
+ <a name="l00052"></a>00052 <span class="comment"> *</span>
70
+ <a name="l00053"></a>00053 <span class="comment"> * ApplicationPoolServer implements a client/server architecture for ApplicationPool.</span>
71
+ <a name="l00054"></a>00054 <span class="comment"> * This allows one to use ApplicationPool in a multi-process environment (unlike</span>
72
+ <a name="l00055"></a>00055 <span class="comment"> * StandardApplicationPool). The cache/pool data is stored in the server. Different</span>
73
+ <a name="l00056"></a>00056 <span class="comment"> * processes can then access the pool through the server.</span>
74
+ <a name="l00057"></a>00057 <span class="comment"> *</span>
75
+ <a name="l00058"></a>00058 <span class="comment"> * ApplicationPoolServer itself does not inherit ApplicationPool. Instead, it returns</span>
76
+ <a name="l00059"></a>00059 <span class="comment"> * an ApplicationPool object via the connect() call. For example:</span>
77
+ <a name="l00060"></a>00060 <span class="comment"> * @code</span>
78
+ <a name="l00061"></a>00061 <span class="comment"> * // Create an ApplicationPoolServer.</span>
79
+ <a name="l00062"></a>00062 <span class="comment"> * ApplicationPoolServer server(...);</span>
80
+ <a name="l00063"></a>00063 <span class="comment"> * </span>
81
+ <a name="l00064"></a>00064 <span class="comment"> * // Now fork a child process, like Apache's prefork MPM eventually will.</span>
82
+ <a name="l00065"></a>00065 <span class="comment"> * pid_t pid = fork();</span>
83
+ <a name="l00066"></a>00066 <span class="comment"> * if (pid == 0) {</span>
84
+ <a name="l00067"></a>00067 <span class="comment"> * // Child process</span>
85
+ <a name="l00068"></a>00068 <span class="comment"> * </span>
86
+ <a name="l00069"></a>00069 <span class="comment"> * // Connect to the server. After connection, we have an ApplicationPool</span>
87
+ <a name="l00070"></a>00070 <span class="comment"> * // object!</span>
88
+ <a name="l00071"></a>00071 <span class="comment"> * ApplicationPoolPtr pool(server.connect());</span>
87
89
  <a name="l00072"></a>00072 <span class="comment"> *</span>
88
- <a name="l00073"></a>00073 <span class="comment"> * _exit(0);</span>
89
- <a name="l00074"></a>00074 <span class="comment"> * } else {</span>
90
- <a name="l00075"></a>00075 <span class="comment"> * // Parent process</span>
91
- <a name="l00076"></a>00076 <span class="comment"> * waitpid(pid, NULL, 0);</span>
92
- <a name="l00077"></a>00077 <span class="comment"> * }</span>
93
- <a name="l00078"></a>00078 <span class="comment"> * @endcode</span>
90
+ <a name="l00073"></a>00073 <span class="comment"> * // We don't need to connect to the server anymore, so we detach from it.</span>
91
+ <a name="l00074"></a>00074 <span class="comment"> * // This frees up some resources, such as file descriptors.</span>
92
+ <a name="l00075"></a>00075 <span class="comment"> * server.detach();</span>
93
+ <a name="l00076"></a>00076 <span class="comment"> *</span>
94
+ <a name="l00077"></a>00077 <span class="comment"> * ApplicationPool::SessionPtr session(pool-&gt;get("/home/webapps/foo"));</span>
95
+ <a name="l00078"></a>00078 <span class="comment"> * do_something_with(session);</span>
94
96
  <a name="l00079"></a>00079 <span class="comment"> *</span>
95
- <a name="l00080"></a>00080 <span class="comment"> * &lt;h2&gt;Implementation notes&lt;/h2&gt;</span>
96
- <a name="l00081"></a>00081 <span class="comment"> *</span>
97
- <a name="l00082"></a>00082 <span class="comment"> * &lt;h3&gt;Separate server executable&lt;/h3&gt;</span>
98
- <a name="l00083"></a>00083 <span class="comment"> * The actual server is implemented in ApplicationPoolServerExecutable.cpp, this class is</span>
99
- <a name="l00084"></a>00084 <span class="comment"> * just a convenience class for starting/stopping the server executable and connecting</span>
100
- <a name="l00085"></a>00085 <span class="comment"> * to it.</span>
97
+ <a name="l00080"></a>00080 <span class="comment"> * _exit(0);</span>
98
+ <a name="l00081"></a>00081 <span class="comment"> * } else {</span>
99
+ <a name="l00082"></a>00082 <span class="comment"> * // Parent process</span>
100
+ <a name="l00083"></a>00083 <span class="comment"> * waitpid(pid, NULL, 0);</span>
101
+ <a name="l00084"></a>00084 <span class="comment"> * }</span>
102
+ <a name="l00085"></a>00085 <span class="comment"> * @endcode</span>
101
103
  <a name="l00086"></a>00086 <span class="comment"> *</span>
102
- <a name="l00087"></a>00087 <span class="comment"> * In the past, the server logic itself was implemented in this class. This implies that</span>
103
- <a name="l00088"></a>00088 <span class="comment"> * the ApplicationPool server ran inside the Apache process. This presented us with several</span>
104
- <a name="l00089"></a>00089 <span class="comment"> * problems:</span>
105
- <a name="l00090"></a>00090 <span class="comment"> * - Because of the usage of threads in the ApplicationPool server, the Apache VM size would</span>
106
- <a name="l00091"></a>00091 <span class="comment"> * go way up. This gave people the (wrong) impression that Passenger uses a lot of memory,</span>
107
- <a name="l00092"></a>00092 <span class="comment"> * or that it leaks memory.</span>
108
- <a name="l00093"></a>00093 <span class="comment"> * - Although it's not entirely confirmed, we suspect that it caused heap fragmentation as</span>
109
- <a name="l00094"></a>00094 <span class="comment"> * well. Apache allocates lots and lots of small objects on the heap, and ApplicationPool</span>
110
- <a name="l00095"></a>00095 <span class="comment"> * server isn't exactly helping. This too gave people the (wrong) impression that</span>
111
- <a name="l00096"></a>00096 <span class="comment"> * Passenger leaks memory.</span>
112
- <a name="l00097"></a>00097 <span class="comment"> * - It would unnecessarily bloat the VM size of Apache worker processes.</span>
113
- <a name="l00098"></a>00098 <span class="comment"> * - We had to resort to all kinds of tricks to make sure that fork()ing a process doesn't</span>
114
- <a name="l00099"></a>00099 <span class="comment"> * result in file descriptor leaks.</span>
115
- <a name="l00100"></a>00100 <span class="comment"> * - Despite everything, there was still a small chance that file descriptor leaks would</span>
116
- <a name="l00101"></a>00101 <span class="comment"> * occur, and this could not be fixed. The reason for this is that the Apache control</span>
117
- <a name="l00102"></a>00102 <span class="comment"> * process may call fork() right after the ApplicationPool server has established a new</span>
118
- <a name="l00103"></a>00103 <span class="comment"> * connection with a client.</span>
119
- <a name="l00104"></a>00104 <span class="comment"> *</span>
120
- <a name="l00105"></a>00105 <span class="comment"> * Because of these problems, it was decided to split the ApplicationPool server to a</span>
121
- <a name="l00106"></a>00106 <span class="comment"> * separate executable. This comes with no performance hit.</span>
122
- <a name="l00107"></a>00107 <span class="comment"> *</span>
123
- <a name="l00108"></a>00108 <span class="comment"> * &lt;h3&gt;Anonymous server socket&lt;/h3&gt;</span>
124
- <a name="l00109"></a>00109 <span class="comment"> * Notice that ApplicationPoolServer does do not use TCP sockets at all, or even named Unix</span>
125
- <a name="l00110"></a>00110 <span class="comment"> * sockets, despite being a server that can handle multiple clients! So ApplicationPoolServer</span>
126
- <a name="l00111"></a>00111 <span class="comment"> * will expose no open ports or temporary Unix socket files. Only child processes are able</span>
127
- <a name="l00112"></a>00112 <span class="comment"> * to use the ApplicationPoolServer.</span>
128
- <a name="l00113"></a>00113 <span class="comment"> *</span>
129
- <a name="l00114"></a>00114 <span class="comment"> * This is implemented through anonymous Unix sockets (&lt;tt&gt;socketpair()&lt;/tt&gt;) and file descriptor</span>
130
- <a name="l00115"></a>00115 <span class="comment"> * passing. It allows one to emulate &lt;tt&gt;accept()&lt;/tt&gt;. ApplicationPoolServer is connected to</span>
131
- <a name="l00116"></a>00116 <span class="comment"> * the server executable through a Unix socket pair. connect() sends a connect request to the</span>
132
- <a name="l00117"></a>00117 <span class="comment"> * server through that socket. The server will then create a new socket pair, and pass one of</span>
133
- <a name="l00118"></a>00118 <span class="comment"> * them back. This new socket pair represents the newly established connection.</span>
134
- <a name="l00119"></a>00119 <span class="comment"> *</span>
135
- <a name="l00120"></a>00120 <span class="comment"> * @ingroup Support</span>
136
- <a name="l00121"></a>00121 <span class="comment"> */</span>
137
- <a name="l00122"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html">00122</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> {
138
- <a name="l00123"></a>00123 <span class="keyword">private</span>:<span class="comment"></span>
139
- <a name="l00124"></a>00124 <span class="comment"> /**</span>
140
- <a name="l00125"></a>00125 <span class="comment"> * Contains data shared between RemoteSession and Client.</span>
141
- <a name="l00126"></a>00126 <span class="comment"> * Since RemoteSession and Client have different life times, i.e. one may be</span>
142
- <a name="l00127"></a>00127 <span class="comment"> * destroyed before the other, they both use a smart pointer that points to</span>
143
- <a name="l00128"></a>00128 <span class="comment"> * a SharedData. This way, the SharedData object is only destroyed when</span>
144
- <a name="l00129"></a>00129 <span class="comment"> * both the RemoteSession and the Client object has been destroyed.</span>
145
- <a name="l00130"></a>00130 <span class="comment"> */</span>
146
- <a name="l00131"></a>00131 <span class="keyword">struct </span>SharedData {<span class="comment"></span>
147
- <a name="l00132"></a>00132 <span class="comment"> /**</span>
148
- <a name="l00133"></a>00133 <span class="comment"> * The socket connection to the ApplicationPool server, as was</span>
149
- <a name="l00134"></a>00134 <span class="comment"> * established by ApplicationPoolServer::connect().</span>
150
- <a name="l00135"></a>00135 <span class="comment"> */</span>
151
- <a name="l00136"></a>00136 <span class="keywordtype">int</span> server;
152
- <a name="l00137"></a>00137
153
- <a name="l00138"></a>00138 ~SharedData() {
154
- <a name="l00139"></a>00139 close(server);
155
- <a name="l00140"></a>00140 }
156
- <a name="l00141"></a>00141 };
157
- <a name="l00142"></a>00142
158
- <a name="l00143"></a>00143 <span class="keyword">typedef</span> shared_ptr&lt;SharedData&gt; SharedDataPtr;
159
- <a name="l00144"></a>00144 <span class="comment"></span>
160
- <a name="l00145"></a>00145 <span class="comment"> /**</span>
161
- <a name="l00146"></a>00146 <span class="comment"> * An Application::Session which works together with ApplicationPoolServer.</span>
162
- <a name="l00147"></a>00147 <span class="comment"> */</span>
163
- <a name="l00148"></a>00148 <span class="keyword">class </span>RemoteSession: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1Application.html" title="Represents a single Ruby on Rails application instance.">Application</a>::Session {
164
- <a name="l00149"></a>00149 <span class="keyword">private</span>:
165
- <a name="l00150"></a>00150 SharedDataPtr data;
166
- <a name="l00151"></a>00151 <span class="keywordtype">int</span> id;
167
- <a name="l00152"></a>00152 <span class="keywordtype">int</span> reader;
168
- <a name="l00153"></a>00153 <span class="keywordtype">int</span> writer;
169
- <a name="l00154"></a>00154 pid_t pid;
170
- <a name="l00155"></a>00155 <span class="keyword">public</span>:
171
- <a name="l00156"></a>00156 RemoteSession(SharedDataPtr data, pid_t pid, <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">int</span> reader, <span class="keywordtype">int</span> writer) {
172
- <a name="l00157"></a>00157 this-&gt;data = data;
173
- <a name="l00158"></a>00158 this-&gt;pid = pid;
174
- <a name="l00159"></a>00159 this-&gt;<span class="keywordtype">id</span> = id;
175
- <a name="l00160"></a>00160 this-&gt;reader = reader;
176
- <a name="l00161"></a>00161 this-&gt;writer = writer;
177
- <a name="l00162"></a>00162 }
178
- <a name="l00163"></a>00163
179
- <a name="l00164"></a>00164 <span class="keyword">virtual</span> ~RemoteSession() {
180
- <a name="l00165"></a>00165 closeReader();
181
- <a name="l00166"></a>00166 closeWriter();
182
- <a name="l00167"></a>00167 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a>(data-&gt;server).write(<span class="stringliteral">"close"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(<span class="keywordtype">id</span>).c_str(), NULL);
183
- <a name="l00168"></a>00168 }
184
- <a name="l00169"></a>00169
185
- <a name="l00170"></a>00170 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getReader()<span class="keyword"> const </span>{
186
- <a name="l00171"></a>00171 <span class="keywordflow">return</span> reader;
104
+ <a name="l00087"></a>00087 <span class="comment"> * &lt;h2&gt;Implementation notes&lt;/h2&gt;</span>
105
+ <a name="l00088"></a>00088 <span class="comment"> *</span>
106
+ <a name="l00089"></a>00089 <span class="comment"> * &lt;h3&gt;Separate server executable&lt;/h3&gt;</span>
107
+ <a name="l00090"></a>00090 <span class="comment"> * The actual server is implemented in ApplicationPoolServerExecutable.cpp, this class is</span>
108
+ <a name="l00091"></a>00091 <span class="comment"> * just a convenience class for starting/stopping the server executable and connecting</span>
109
+ <a name="l00092"></a>00092 <span class="comment"> * to it.</span>
110
+ <a name="l00093"></a>00093 <span class="comment"> *</span>
111
+ <a name="l00094"></a>00094 <span class="comment"> * In the past, the server logic itself was implemented in this class. This implies that</span>
112
+ <a name="l00095"></a>00095 <span class="comment"> * the ApplicationPool server ran inside the Apache process. This presented us with several</span>
113
+ <a name="l00096"></a>00096 <span class="comment"> * problems:</span>
114
+ <a name="l00097"></a>00097 <span class="comment"> * - Because of the usage of threads in the ApplicationPool server, the Apache VM size would</span>
115
+ <a name="l00098"></a>00098 <span class="comment"> * go way up. This gave people the (wrong) impression that Passenger uses a lot of memory,</span>
116
+ <a name="l00099"></a>00099 <span class="comment"> * or that it leaks memory.</span>
117
+ <a name="l00100"></a>00100 <span class="comment"> * - Although it's not entirely confirmed, we suspect that it caused heap fragmentation as</span>
118
+ <a name="l00101"></a>00101 <span class="comment"> * well. Apache allocates lots and lots of small objects on the heap, and ApplicationPool</span>
119
+ <a name="l00102"></a>00102 <span class="comment"> * server isn't exactly helping. This too gave people the (wrong) impression that</span>
120
+ <a name="l00103"></a>00103 <span class="comment"> * Passenger leaks memory.</span>
121
+ <a name="l00104"></a>00104 <span class="comment"> * - It would unnecessarily bloat the VM size of Apache worker processes.</span>
122
+ <a name="l00105"></a>00105 <span class="comment"> * - We had to resort to all kinds of tricks to make sure that fork()ing a process doesn't</span>
123
+ <a name="l00106"></a>00106 <span class="comment"> * result in file descriptor leaks.</span>
124
+ <a name="l00107"></a>00107 <span class="comment"> * - Despite everything, there was still a small chance that file descriptor leaks would</span>
125
+ <a name="l00108"></a>00108 <span class="comment"> * occur, and this could not be fixed. The reason for this is that the Apache control</span>
126
+ <a name="l00109"></a>00109 <span class="comment"> * process may call fork() right after the ApplicationPool server has established a new</span>
127
+ <a name="l00110"></a>00110 <span class="comment"> * connection with a client.</span>
128
+ <a name="l00111"></a>00111 <span class="comment"> *</span>
129
+ <a name="l00112"></a>00112 <span class="comment"> * Because of these problems, it was decided to split the ApplicationPool server to a</span>
130
+ <a name="l00113"></a>00113 <span class="comment"> * separate executable. This comes with no performance hit.</span>
131
+ <a name="l00114"></a>00114 <span class="comment"> *</span>
132
+ <a name="l00115"></a>00115 <span class="comment"> * &lt;h3&gt;Anonymous server socket&lt;/h3&gt;</span>
133
+ <a name="l00116"></a>00116 <span class="comment"> * Notice that ApplicationPoolServer does do not use TCP sockets at all, or even named Unix</span>
134
+ <a name="l00117"></a>00117 <span class="comment"> * sockets, despite being a server that can handle multiple clients! So ApplicationPoolServer</span>
135
+ <a name="l00118"></a>00118 <span class="comment"> * will expose no open ports or temporary Unix socket files. Only child processes are able</span>
136
+ <a name="l00119"></a>00119 <span class="comment"> * to use the ApplicationPoolServer.</span>
137
+ <a name="l00120"></a>00120 <span class="comment"> *</span>
138
+ <a name="l00121"></a>00121 <span class="comment"> * This is implemented through anonymous Unix sockets (&lt;tt&gt;socketpair()&lt;/tt&gt;) and file descriptor</span>
139
+ <a name="l00122"></a>00122 <span class="comment"> * passing. It allows one to emulate &lt;tt&gt;accept()&lt;/tt&gt;. ApplicationPoolServer is connected to</span>
140
+ <a name="l00123"></a>00123 <span class="comment"> * the server executable through a Unix socket pair. connect() sends a connect request to the</span>
141
+ <a name="l00124"></a>00124 <span class="comment"> * server through that socket. The server will then create a new socket pair, and pass one of</span>
142
+ <a name="l00125"></a>00125 <span class="comment"> * them back. This new socket pair represents the newly established connection.</span>
143
+ <a name="l00126"></a>00126 <span class="comment"> *</span>
144
+ <a name="l00127"></a>00127 <span class="comment"> * @ingroup Support</span>
145
+ <a name="l00128"></a>00128 <span class="comment"> */</span>
146
+ <a name="l00129"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html">00129</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> {
147
+ <a name="l00130"></a>00130 <span class="keyword">private</span>:<span class="comment"></span>
148
+ <a name="l00131"></a>00131 <span class="comment"> /**</span>
149
+ <a name="l00132"></a>00132 <span class="comment"> * Contains data shared between RemoteSession and Client.</span>
150
+ <a name="l00133"></a>00133 <span class="comment"> * Since RemoteSession and Client have different life times, i.e. one may be</span>
151
+ <a name="l00134"></a>00134 <span class="comment"> * destroyed before the other, they both use a smart pointer that points to</span>
152
+ <a name="l00135"></a>00135 <span class="comment"> * a SharedData. This way, the SharedData object is only destroyed when</span>
153
+ <a name="l00136"></a>00136 <span class="comment"> * both the RemoteSession and the Client object has been destroyed.</span>
154
+ <a name="l00137"></a>00137 <span class="comment"> */</span>
155
+ <a name="l00138"></a>00138 <span class="keyword">struct </span>SharedData {<span class="comment"></span>
156
+ <a name="l00139"></a>00139 <span class="comment"> /**</span>
157
+ <a name="l00140"></a>00140 <span class="comment"> * The socket connection to the ApplicationPool server, as was</span>
158
+ <a name="l00141"></a>00141 <span class="comment"> * established by ApplicationPoolServer::connect().</span>
159
+ <a name="l00142"></a>00142 <span class="comment"> */</span>
160
+ <a name="l00143"></a>00143 <span class="keywordtype">int</span> server;
161
+ <a name="l00144"></a>00144
162
+ <a name="l00145"></a>00145 mutex lock;
163
+ <a name="l00146"></a>00146
164
+ <a name="l00147"></a>00147 ~SharedData() {
165
+ <a name="l00148"></a>00148 <span class="keywordtype">int</span> ret;
166
+ <a name="l00149"></a>00149 <span class="keywordflow">do</span> {
167
+ <a name="l00150"></a>00150 ret = close(server);
168
+ <a name="l00151"></a>00151 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EINTR);
169
+ <a name="l00152"></a>00152 }
170
+ <a name="l00153"></a>00153 };
171
+ <a name="l00154"></a>00154
172
+ <a name="l00155"></a>00155 <span class="keyword">typedef</span> shared_ptr&lt;SharedData&gt; SharedDataPtr;
173
+ <a name="l00156"></a>00156 <span class="comment"></span>
174
+ <a name="l00157"></a>00157 <span class="comment"> /**</span>
175
+ <a name="l00158"></a>00158 <span class="comment"> * An Application::Session which works together with ApplicationPoolServer.</span>
176
+ <a name="l00159"></a>00159 <span class="comment"> */</span>
177
+ <a name="l00160"></a>00160 <span class="keyword">class </span>RemoteSession: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1Application.html" title="Represents a single Ruby on Rails or Rack application instance.">Application</a>::Session {
178
+ <a name="l00161"></a>00161 <span class="keyword">private</span>:
179
+ <a name="l00162"></a>00162 SharedDataPtr data;
180
+ <a name="l00163"></a>00163 <span class="keywordtype">int</span> id;
181
+ <a name="l00164"></a>00164 <span class="keywordtype">int</span> fd;
182
+ <a name="l00165"></a>00165 pid_t pid;
183
+ <a name="l00166"></a>00166 <span class="keyword">public</span>:
184
+ <a name="l00167"></a>00167 RemoteSession(SharedDataPtr data, pid_t pid, <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">int</span> fd) {
185
+ <a name="l00168"></a>00168 this-&gt;data = data;
186
+ <a name="l00169"></a>00169 this-&gt;pid = pid;
187
+ <a name="l00170"></a>00170 this-&gt;<span class="keywordtype">id</span> = id;
188
+ <a name="l00171"></a>00171 this-&gt;fd = fd;
187
189
  <a name="l00172"></a>00172 }
188
190
  <a name="l00173"></a>00173
189
- <a name="l00174"></a>00174 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeReader() {
190
- <a name="l00175"></a>00175 <span class="keywordflow">if</span> (reader != -1) {
191
- <a name="l00176"></a>00176 close(reader);
192
- <a name="l00177"></a>00177 reader = -1;
193
- <a name="l00178"></a>00178 }
194
- <a name="l00179"></a>00179 }
195
- <a name="l00180"></a>00180
196
- <a name="l00181"></a>00181 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getWriter()<span class="keyword"> const </span>{
197
- <a name="l00182"></a>00182 <span class="keywordflow">return</span> writer;
198
- <a name="l00183"></a>00183 }
199
- <a name="l00184"></a>00184
200
- <a name="l00185"></a>00185 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeWriter() {
201
- <a name="l00186"></a>00186 <span class="keywordflow">if</span> (writer != -1) {
202
- <a name="l00187"></a>00187 close(writer);
203
- <a name="l00188"></a>00188 writer = -1;
204
- <a name="l00189"></a>00189 }
205
- <a name="l00190"></a>00190 }
206
- <a name="l00191"></a>00191
207
- <a name="l00192"></a>00192 <span class="keyword">virtual</span> pid_t getPid()<span class="keyword"> const </span>{
208
- <a name="l00193"></a>00193 <span class="keywordflow">return</span> pid;
209
- <a name="l00194"></a>00194 }
210
- <a name="l00195"></a>00195 };
211
- <a name="l00196"></a>00196 <span class="comment"></span>
212
- <a name="l00197"></a>00197 <span class="comment"> /**</span>
213
- <a name="l00198"></a>00198 <span class="comment"> * An ApplicationPool implementation that works together with ApplicationPoolServer.</span>
214
- <a name="l00199"></a>00199 <span class="comment"> * It doesn't do much by itself, its job is mostly to forward queries/commands to</span>
215
- <a name="l00200"></a>00200 <span class="comment"> * the server and returning the result. Most of the logic is in the server executable.</span>
216
- <a name="l00201"></a>00201 <span class="comment"> */</span>
217
- <a name="l00202"></a>00202 <span class="keyword">class </span><a class="code" href="classClient.html#e625bb32c95bde75bfa4bdfdb8ee56db" title="Create a new Client object.">Client</a>: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> {
218
- <a name="l00203"></a>00203 <span class="keyword">private</span>:
219
- <a name="l00204"></a>00204 SharedDataPtr data;
220
- <a name="l00205"></a>00205
221
- <a name="l00206"></a>00206 <span class="keyword">public</span>:<span class="comment"></span>
222
- <a name="l00207"></a>00207 <span class="comment"> /**</span>
223
- <a name="l00208"></a>00208 <span class="comment"> * Create a new Client.</span>
224
- <a name="l00209"></a>00209 <span class="comment"> *</span>
225
- <a name="l00210"></a>00210 <span class="comment"> * @param sock The newly established socket connection with the ApplicationPoolServer.</span>
226
- <a name="l00211"></a>00211 <span class="comment"> */</span>
227
- <a name="l00212"></a>00212 Client(<span class="keywordtype">int</span> sock) {
228
- <a name="l00213"></a>00213 data = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> SharedData());
229
- <a name="l00214"></a>00214 data-&gt;server = sock;
230
- <a name="l00215"></a>00215 }
231
- <a name="l00216"></a>00216
232
- <a name="l00217"></a>00217 <span class="keyword">virtual</span> <span class="keywordtype">void</span> clear() {
233
- <a name="l00218"></a>00218 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
234
- <a name="l00219"></a>00219 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"clear"</span>, NULL);
235
- <a name="l00220"></a>00220 }
236
- <a name="l00221"></a>00221
237
- <a name="l00222"></a>00222 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMaxIdleTime(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seconds) {
238
- <a name="l00223"></a>00223 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
239
- <a name="l00224"></a>00224 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMaxIdleTime"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(seconds).c_str(), NULL);
240
- <a name="l00225"></a>00225 }
241
- <a name="l00226"></a>00226
242
- <a name="l00227"></a>00227 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMax(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max) {
243
- <a name="l00228"></a>00228 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
244
- <a name="l00229"></a>00229 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMax"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(max).c_str(), NULL);
245
- <a name="l00230"></a>00230 }
246
- <a name="l00231"></a>00231
247
- <a name="l00232"></a>00232 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getActive()<span class="keyword"> const </span>{
248
- <a name="l00233"></a>00233 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
249
- <a name="l00234"></a>00234 vector&lt;string&gt; args;
250
- <a name="l00235"></a>00235
251
- <a name="l00236"></a>00236 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getActive"</span>, NULL);
252
- <a name="l00237"></a>00237 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
253
- <a name="l00238"></a>00238 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
254
- <a name="l00239"></a>00239 }
255
- <a name="l00240"></a>00240
256
- <a name="l00241"></a>00241 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getCount()<span class="keyword"> const </span>{
257
- <a name="l00242"></a>00242 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
258
- <a name="l00243"></a>00243 vector&lt;string&gt; args;
259
- <a name="l00244"></a>00244
260
- <a name="l00245"></a>00245 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getCount"</span>, NULL);
261
- <a name="l00246"></a>00246 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
262
- <a name="l00247"></a>00247 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
263
- <a name="l00248"></a>00248 }
264
- <a name="l00249"></a>00249
265
- <a name="l00250"></a>00250 <span class="keyword">virtual</span> pid_t getSpawnServerPid()<span class="keyword"> const </span>{
266
- <a name="l00251"></a>00251 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
267
- <a name="l00252"></a>00252 vector&lt;string&gt; args;
268
- <a name="l00253"></a>00253
269
- <a name="l00254"></a>00254 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getSpawnServerPid"</span>, NULL);
270
- <a name="l00255"></a>00255 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
271
- <a name="l00256"></a>00256 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
272
- <a name="l00257"></a>00257 }
273
- <a name="l00258"></a>00258
274
- <a name="l00259"></a>00259 <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>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot, <span class="keywordtype">bool</span> lowerPrivilege = <span class="keyword">true</span>,
275
- <a name="l00260"></a>00260 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;lowestUser = <span class="stringliteral">"nobody"</span>) {
191
+ <a name="l00174"></a>00174 <span class="keyword">virtual</span> ~RemoteSession() {
192
+ <a name="l00175"></a>00175 closeStream();
193
+ <a name="l00176"></a>00176 mutex::scoped_lock(data-&gt;lock);
194
+ <a name="l00177"></a>00177 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a>(data-&gt;server).write(<span class="stringliteral">"close"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(<span class="keywordtype">id</span>).c_str(), NULL);
195
+ <a name="l00178"></a>00178 }
196
+ <a name="l00179"></a>00179
197
+ <a name="l00180"></a>00180 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getStream()<span class="keyword"> const </span>{
198
+ <a name="l00181"></a>00181 <span class="keywordflow">return</span> fd;
199
+ <a name="l00182"></a>00182 }
200
+ <a name="l00183"></a>00183
201
+ <a name="l00184"></a>00184 <span class="keyword">virtual</span> <span class="keywordtype">void</span> shutdownReader() {
202
+ <a name="l00185"></a>00185 <span class="keywordflow">if</span> (fd != -1) {
203
+ <a name="l00186"></a>00186 <span class="keywordtype">int</span> ret = InterruptableCalls::shutdown(fd, SHUT_RD);
204
+ <a name="l00187"></a>00187 <span class="keywordflow">if</span> (ret == -1) {
205
+ <a name="l00188"></a>00188 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot shutdown the writer stream"</span>,
206
+ <a name="l00189"></a>00189 errno);
207
+ <a name="l00190"></a>00190 }
208
+ <a name="l00191"></a>00191 }
209
+ <a name="l00192"></a>00192 }
210
+ <a name="l00193"></a>00193
211
+ <a name="l00194"></a>00194 <span class="keyword">virtual</span> <span class="keywordtype">void</span> shutdownWriter() {
212
+ <a name="l00195"></a>00195 <span class="keywordflow">if</span> (fd != -1) {
213
+ <a name="l00196"></a>00196 <span class="keywordtype">int</span> ret = InterruptableCalls::shutdown(fd, SHUT_WR);
214
+ <a name="l00197"></a>00197 <span class="keywordflow">if</span> (ret == -1) {
215
+ <a name="l00198"></a>00198 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot shutdown the writer stream"</span>,
216
+ <a name="l00199"></a>00199 errno);
217
+ <a name="l00200"></a>00200 }
218
+ <a name="l00201"></a>00201 }
219
+ <a name="l00202"></a>00202 }
220
+ <a name="l00203"></a>00203
221
+ <a name="l00204"></a>00204 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeStream() {
222
+ <a name="l00205"></a>00205 <span class="keywordflow">if</span> (fd != -1) {
223
+ <a name="l00206"></a>00206 <span class="keywordtype">int</span> ret = InterruptableCalls::close(fd);
224
+ <a name="l00207"></a>00207 <span class="keywordflow">if</span> (ret == -1) {
225
+ <a name="l00208"></a>00208 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot close the session stream"</span>,
226
+ <a name="l00209"></a>00209 errno);
227
+ <a name="l00210"></a>00210 }
228
+ <a name="l00211"></a>00211 fd = -1;
229
+ <a name="l00212"></a>00212 }
230
+ <a name="l00213"></a>00213 }
231
+ <a name="l00214"></a>00214
232
+ <a name="l00215"></a>00215 <span class="keyword">virtual</span> <span class="keywordtype">void</span> discardStream() {
233
+ <a name="l00216"></a>00216 fd = -1;
234
+ <a name="l00217"></a>00217 }
235
+ <a name="l00218"></a>00218
236
+ <a name="l00219"></a>00219 <span class="keyword">virtual</span> pid_t getPid()<span class="keyword"> const </span>{
237
+ <a name="l00220"></a>00220 <span class="keywordflow">return</span> pid;
238
+ <a name="l00221"></a>00221 }
239
+ <a name="l00222"></a>00222 };
240
+ <a name="l00223"></a>00223 <span class="comment"></span>
241
+ <a name="l00224"></a>00224 <span class="comment"> /**</span>
242
+ <a name="l00225"></a>00225 <span class="comment"> * An ApplicationPool implementation that works together with ApplicationPoolServer.</span>
243
+ <a name="l00226"></a>00226 <span class="comment"> * It doesn't do much by itself, its job is mostly to forward queries/commands to</span>
244
+ <a name="l00227"></a>00227 <span class="comment"> * the server and returning the result. Most of the logic is in the server executable.</span>
245
+ <a name="l00228"></a>00228 <span class="comment"> */</span>
246
+ <a name="l00229"></a>00229 <span class="keyword">class </span><a class="code" href="classClient.html#e625bb32c95bde75bfa4bdfdb8ee56db" title="Create a new Client object.">Client</a>: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> {
247
+ <a name="l00230"></a>00230 <span class="keyword">private</span>:
248
+ <a name="l00231"></a>00231 <span class="comment">// The smart pointer only serves to keep the shared data alive.</span>
249
+ <a name="l00232"></a>00232 <span class="comment">// We access the shared data via a normal pointer, for performance.</span>
250
+ <a name="l00233"></a>00233 SharedDataPtr dataSmartPointer;
251
+ <a name="l00234"></a>00234 SharedData *data;
252
+ <a name="l00235"></a>00235
253
+ <a name="l00236"></a>00236 <span class="keyword">public</span>:<span class="comment"></span>
254
+ <a name="l00237"></a>00237 <span class="comment"> /**</span>
255
+ <a name="l00238"></a>00238 <span class="comment"> * Create a new Client.</span>
256
+ <a name="l00239"></a>00239 <span class="comment"> *</span>
257
+ <a name="l00240"></a>00240 <span class="comment"> * @param sock The newly established socket connection with the ApplicationPoolServer.</span>
258
+ <a name="l00241"></a>00241 <span class="comment"> */</span>
259
+ <a name="l00242"></a>00242 Client(<span class="keywordtype">int</span> sock) {
260
+ <a name="l00243"></a>00243 dataSmartPointer = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> SharedData());
261
+ <a name="l00244"></a>00244 data = dataSmartPointer.get();
262
+ <a name="l00245"></a>00245 data-&gt;server = sock;
263
+ <a name="l00246"></a>00246 }
264
+ <a name="l00247"></a>00247
265
+ <a name="l00248"></a>00248 <span class="keyword">virtual</span> <span class="keywordtype">void</span> clear() {
266
+ <a name="l00249"></a>00249 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
267
+ <a name="l00250"></a>00250 mutex::scoped_lock l(data-&gt;lock);
268
+ <a name="l00251"></a>00251 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"clear"</span>, NULL);
269
+ <a name="l00252"></a>00252 }
270
+ <a name="l00253"></a>00253
271
+ <a name="l00254"></a>00254 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMaxIdleTime(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seconds) {
272
+ <a name="l00255"></a>00255 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
273
+ <a name="l00256"></a>00256 mutex::scoped_lock l(data-&gt;lock);
274
+ <a name="l00257"></a>00257 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMaxIdleTime"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(seconds).c_str(), NULL);
275
+ <a name="l00258"></a>00258 }
276
+ <a name="l00259"></a>00259
277
+ <a name="l00260"></a>00260 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMax(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max) {
276
278
  <a name="l00261"></a>00261 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
277
- <a name="l00262"></a>00262 vector&lt;string&gt; args;
278
- <a name="l00263"></a>00263 <span class="keywordtype">int</span> reader, writer;
279
- <a name="l00264"></a>00264
280
- <a name="l00265"></a>00265 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"get"</span>, appRoot.c_str(),
281
- <a name="l00266"></a>00266 (lowerPrivilege) ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>,
282
- <a name="l00267"></a>00267 lowestUser.c_str(), NULL);
283
- <a name="l00268"></a>00268 <span class="keywordflow">if</span> (!channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args)) {
284
- <a name="l00269"></a>00269 <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>(<span class="stringliteral">"The ApplicationPool server unexpectedly closed the connection."</span>);
285
- <a name="l00270"></a>00270 }
286
- <a name="l00271"></a>00271 <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"ok"</span>) {
287
- <a name="l00272"></a>00272 reader = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
288
- <a name="l00273"></a>00273 writer = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
289
- <a name="l00274"></a>00274 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> RemoteSession(data, <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[1]), <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[2]), reader, writer));
290
- <a name="l00275"></a>00275 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"SpawnException"</span>) {
291
- <a name="l00276"></a>00276 <span class="keywordflow">if</span> (args[2] == <span class="stringliteral">"true"</span>) {
292
- <a name="l00277"></a>00277 <span class="keywordtype">string</span> errorPage;
293
- <a name="l00278"></a>00278
294
- <a name="l00279"></a>00279 <span class="keywordflow">if</span> (!channel.<a class="code" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc" title="Read a scalar message from the underlying file descriptor.">readScalar</a>(errorPage)) {
295
- <a name="l00280"></a>00280 <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>(<span class="stringliteral">"The ApplicationPool server unexpectedly closed the connection."</span>);
296
- <a name="l00281"></a>00281 }
297
- <a name="l00282"></a>00282 <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>(args[1], errorPage);
298
- <a name="l00283"></a>00283 } <span class="keywordflow">else</span> {
299
- <a name="l00284"></a>00284 <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>(args[1]);
300
- <a name="l00285"></a>00285 }
301
- <a name="l00286"></a>00286 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"IOException"</span>) {
302
- <a name="l00287"></a>00287 <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>(args[1]);
303
- <a name="l00288"></a>00288 } <span class="keywordflow">else</span> {
304
- <a name="l00289"></a>00289 <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>(<span class="stringliteral">"The ApplicationPool server returned an unknown message."</span>);
305
- <a name="l00290"></a>00290 }
306
- <a name="l00291"></a>00291 }
307
- <a name="l00292"></a>00292 };
308
- <a name="l00293"></a>00293
309
- <a name="l00294"></a>00294
310
- <a name="l00295"></a>00295 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> SERVER_SOCKET_FD = 3;
311
- <a name="l00296"></a>00296
312
- <a name="l00297"></a>00297 <span class="keywordtype">string</span> m_serverExecutable;
313
- <a name="l00298"></a>00298 <span class="keywordtype">string</span> m_spawnServerCommand;
314
- <a name="l00299"></a>00299 <span class="keywordtype">string</span> m_logFile;
315
- <a name="l00300"></a>00300 <span class="keywordtype">string</span> m_environment;
316
- <a name="l00301"></a>00301 <span class="keywordtype">string</span> m_rubyCommand;
317
- <a name="l00302"></a>00302 <span class="keywordtype">string</span> m_user;
318
- <a name="l00303"></a>00303 <span class="comment"></span>
319
- <a name="l00304"></a>00304 <span class="comment"> /**</span>
320
- <a name="l00305"></a>00305 <span class="comment"> * The PID of the ApplicationPool server process. If no server process</span>
321
- <a name="l00306"></a>00306 <span class="comment"> * is running, then &lt;tt&gt;serverPid == 0&lt;/tt&gt;.</span>
322
- <a name="l00307"></a>00307 <span class="comment"> *</span>
323
- <a name="l00308"></a>00308 <span class="comment"> * @invariant</span>
324
- <a name="l00309"></a>00309 <span class="comment"> * if serverPid == 0:</span>
325
- <a name="l00310"></a>00310 <span class="comment"> * serverSocket == -1</span>
326
- <a name="l00311"></a>00311 <span class="comment"> */</span>
327
- <a name="l00312"></a>00312 pid_t serverPid;
328
- <a name="l00313"></a>00313 <span class="comment"></span>
329
- <a name="l00314"></a>00314 <span class="comment"> /**</span>
330
- <a name="l00315"></a>00315 <span class="comment"> * The connection to the ApplicationPool server process. If no server</span>
331
- <a name="l00316"></a>00316 <span class="comment"> * process is running, then &lt;tt&gt;serverSocket == -1&lt;/tt&gt;.</span>
332
- <a name="l00317"></a>00317 <span class="comment"> *</span>
333
- <a name="l00318"></a>00318 <span class="comment"> * @invariant</span>
334
- <a name="l00319"></a>00319 <span class="comment"> * if serverPid == 0:</span>
335
- <a name="l00320"></a>00320 <span class="comment"> * serverSocket == -1</span>
336
- <a name="l00321"></a>00321 <span class="comment"> */</span>
337
- <a name="l00322"></a>00322 <span class="keywordtype">int</span> serverSocket;
338
- <a name="l00323"></a>00323 <span class="comment"></span>
339
- <a name="l00324"></a>00324 <span class="comment"> /**</span>
340
- <a name="l00325"></a>00325 <span class="comment"> * Shutdown the currently running ApplicationPool server process.</span>
341
- <a name="l00326"></a>00326 <span class="comment"> *</span>
342
- <a name="l00327"></a>00327 <span class="comment"> * @pre serverSocket != -1 &amp;&amp; serverPid != 0</span>
343
- <a name="l00328"></a>00328 <span class="comment"> * @post serverSocket == -1 &amp;&amp; serverPid == 0</span>
344
- <a name="l00329"></a>00329 <span class="comment"> */</span>
345
- <a name="l00330"></a>00330 <span class="keywordtype">void</span> shutdownServer() {
346
- <a name="l00331"></a>00331 time_t begin;
347
- <a name="l00332"></a>00332 <span class="keywordtype">bool</span> done;
348
- <a name="l00333"></a>00333 <span class="keywordtype">int</span> ret;
349
- <a name="l00334"></a>00334
350
- <a name="l00335"></a>00335 <span class="keywordflow">do</span> {
351
- <a name="l00336"></a>00336 ret = close(serverSocket);
352
- <a name="l00337"></a>00337 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EINTR);
353
- <a name="l00338"></a>00338
354
- <a name="l00339"></a>00339 P_DEBUG(<span class="stringliteral">"Waiting for existing ApplicationPoolServerExecutable to exit..."</span>);
355
- <a name="l00340"></a>00340 begin = time(NULL);
356
- <a name="l00341"></a>00341 <span class="keywordflow">while</span> (!done &amp;&amp; time(NULL) &lt; begin + 5) {
357
- <a name="l00342"></a>00342 done = waitpid(serverPid, NULL, WNOHANG) &gt; 0;
358
- <a name="l00343"></a>00343 usleep(100000);
359
- <a name="l00344"></a>00344 }
360
- <a name="l00345"></a>00345 <span class="keywordflow">if</span> (done) {
361
- <a name="l00346"></a>00346 P_DEBUG(<span class="stringliteral">"ApplicationPoolServerExecutable exited."</span>);
362
- <a name="l00347"></a>00347 } <span class="keywordflow">else</span> {
363
- <a name="l00348"></a>00348 P_DEBUG(<span class="stringliteral">"ApplicationPoolServerExecutable not exited in time. Killing it..."</span>);
364
- <a name="l00349"></a>00349 kill(serverPid, SIGTERM);
365
- <a name="l00350"></a>00350 waitpid(serverPid, NULL, 0);
366
- <a name="l00351"></a>00351 }
367
- <a name="l00352"></a>00352 serverSocket = -1;
368
- <a name="l00353"></a>00353 serverPid = 0;
369
- <a name="l00354"></a>00354 }
370
- <a name="l00355"></a>00355 <span class="comment"></span>
371
- <a name="l00356"></a>00356 <span class="comment"> /**</span>
372
- <a name="l00357"></a>00357 <span class="comment"> * Start an ApplicationPool server process. If there's already one running,</span>
373
- <a name="l00358"></a>00358 <span class="comment"> * then the currently running one will be shutdown.</span>
374
- <a name="l00359"></a>00359 <span class="comment"> *</span>
375
- <a name="l00360"></a>00360 <span class="comment"> * @post serverSocket != -1 &amp;&amp; serverPid != 0</span>
376
- <a name="l00361"></a>00361 <span class="comment"> * @throw SystemException Something went wrong.</span>
377
- <a name="l00362"></a>00362 <span class="comment"> */</span>
378
- <a name="l00363"></a>00363 <span class="keywordtype">void</span> restartServer() {
379
- <a name="l00364"></a>00364 <span class="keywordtype">int</span> fds[2];
380
- <a name="l00365"></a>00365 pid_t pid;
381
- <a name="l00366"></a>00366
382
- <a name="l00367"></a>00367 <span class="keywordflow">if</span> (serverPid != 0) {
383
- <a name="l00368"></a>00368 shutdownServer();
384
- <a name="l00369"></a>00369 }
385
- <a name="l00370"></a>00370
386
- <a name="l00371"></a>00371 <span class="keywordflow">if</span> (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == -1) {
387
- <a name="l00372"></a>00372 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot create a Unix socket pair"</span>, errno);
388
- <a name="l00373"></a>00373 }
389
- <a name="l00374"></a>00374
390
- <a name="l00375"></a>00375 pid = fork();
391
- <a name="l00376"></a>00376 <span class="keywordflow">if</span> (pid == 0) { <span class="comment">// Child process.</span>
392
- <a name="l00377"></a>00377 dup2(fds[0], 3);
393
- <a name="l00378"></a>00378
394
- <a name="l00379"></a>00379 <span class="comment">// Close all unnecessary file descriptors</span>
395
- <a name="l00380"></a>00380 <span class="keywordflow">for</span> (<span class="keywordtype">long</span> i = sysconf(_SC_OPEN_MAX) - 1; i &gt; SERVER_SOCKET_FD; i--) {
396
- <a name="l00381"></a>00381 close(i);
397
- <a name="l00382"></a>00382 }
398
- <a name="l00383"></a>00383
399
- <a name="l00384"></a>00384 execlp(
400
- <a name="l00385"></a>00385 #<span class="keywordflow">if</span> 0
401
- <a name="l00386"></a>00386 <span class="stringliteral">"valgrind"</span>,
402
- <a name="l00387"></a>00387 <span class="stringliteral">"valgrind"</span>,
403
- <a name="l00388"></a>00388 #<span class="keywordflow">else</span>
404
- <a name="l00389"></a>00389 m_serverExecutable.c_str(),
405
- <a name="l00390"></a>00390 <span class="preprocessor"> #endif</span>
406
- <a name="l00391"></a>00391 <span class="preprocessor"></span> m_serverExecutable.c_str(),
407
- <a name="l00392"></a>00392 m_spawnServerCommand.c_str(),
408
- <a name="l00393"></a>00393 m_logFile.c_str(),
409
- <a name="l00394"></a>00394 m_environment.c_str(),
410
- <a name="l00395"></a>00395 m_rubyCommand.c_str(),
411
- <a name="l00396"></a>00396 m_user.c_str(),
412
- <a name="l00397"></a>00397 NULL);
413
- <a name="l00398"></a>00398 <span class="keywordtype">int</span> e = errno;
414
- <a name="l00399"></a>00399 fprintf(stderr, <span class="stringliteral">"*** Passenger ERROR: Cannot execute %s: %s (%d)\n"</span>,
415
- <a name="l00400"></a>00400 m_serverExecutable.c_str(), strerror(e), e);
416
- <a name="l00401"></a>00401 fflush(stderr);
417
- <a name="l00402"></a>00402 _exit(1);
418
- <a name="l00403"></a>00403 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pid == -1) { <span class="comment">// Error.</span>
419
- <a name="l00404"></a>00404 close(fds[0]);
420
- <a name="l00405"></a>00405 close(fds[1]);
421
- <a name="l00406"></a>00406 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot create a new process"</span>, errno);
422
- <a name="l00407"></a>00407 } <span class="keywordflow">else</span> { <span class="comment">// Parent process.</span>
423
- <a name="l00408"></a>00408 close(fds[0]);
424
- <a name="l00409"></a>00409 serverSocket = fds[1];
425
- <a name="l00410"></a>00410 serverPid = pid;
426
- <a name="l00411"></a>00411 }
427
- <a name="l00412"></a>00412 }
428
- <a name="l00413"></a>00413
429
- <a name="l00414"></a>00414 <span class="keyword">public</span>:<span class="comment"></span>
430
- <a name="l00415"></a>00415 <span class="comment"> /**</span>
431
- <a name="l00416"></a>00416 <span class="comment"> * Create a new ApplicationPoolServer object.</span>
432
- <a name="l00417"></a>00417 <span class="comment"> *</span>
433
- <a name="l00418"></a>00418 <span class="comment"> * @param serverExecutable The filename of the ApplicationPool server</span>
434
- <a name="l00419"></a>00419 <span class="comment"> * executable to use.</span>
435
- <a name="l00420"></a>00420 <span class="comment"> * @param spawnServerCommand The filename of the spawn server to use.</span>
436
- <a name="l00421"></a>00421 <span class="comment"> * @param logFile Specify a log file that the spawn server should use.</span>
437
- <a name="l00422"></a>00422 <span class="comment"> * Messages on its standard output and standard error channels</span>
438
- <a name="l00423"></a>00423 <span class="comment"> * will be written to this log file. If an empty string is</span>
439
- <a name="l00424"></a>00424 <span class="comment"> * specified, no log file will be used, and the spawn server</span>
440
- <a name="l00425"></a>00425 <span class="comment"> * will use the same standard output/error channels as the</span>
441
- <a name="l00426"></a>00426 <span class="comment"> * current process.</span>
442
- <a name="l00427"></a>00427 <span class="comment"> * @param environment The RAILS_ENV environment that all RoR applications</span>
443
- <a name="l00428"></a>00428 <span class="comment"> * should use. If an empty string is specified, the current value</span>
444
- <a name="l00429"></a>00429 <span class="comment"> * of the RAILS_ENV environment variable will be used.</span>
445
- <a name="l00430"></a>00430 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
446
- <a name="l00431"></a>00431 <span class="comment"> * @param user The user that the spawn manager should run as. This</span>
447
- <a name="l00432"></a>00432 <span class="comment"> * parameter only has effect if the current process is</span>
448
- <a name="l00433"></a>00433 <span class="comment"> * running as root. If the empty string is given, or if</span>
449
- <a name="l00434"></a>00434 <span class="comment"> * the &lt;tt&gt;user&lt;/tt&gt; is not a valid username, then</span>
450
- <a name="l00435"></a>00435 <span class="comment"> * the spawn manager will be run as the current user.</span>
451
- <a name="l00436"></a>00436 <span class="comment"> * @throws SystemException An error occured while trying to setup the spawn server</span>
452
- <a name="l00437"></a>00437 <span class="comment"> * or the server socket.</span>
453
- <a name="l00438"></a>00438 <span class="comment"> * @throws IOException The specified log file could not be opened.</span>
454
- <a name="l00439"></a>00439 <span class="comment"> */</span>
455
- <a name="l00440"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#3b63e995b09857659935132b6a4b97cc">00440</a> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#3b63e995b09857659935132b6a4b97cc" title="Create a new ApplicationPoolServer object.">ApplicationPoolServer</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;serverExecutable,
456
- <a name="l00441"></a>00441 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnServerCommand,
457
- <a name="l00442"></a>00442 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;logFile = <span class="stringliteral">""</span>,
458
- <a name="l00443"></a>00443 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;environment = <span class="stringliteral">"production"</span>,
459
- <a name="l00444"></a>00444 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;rubyCommand = <span class="stringliteral">"ruby"</span>,
460
- <a name="l00445"></a>00445 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;user = <span class="stringliteral">""</span>)
461
- <a name="l00446"></a>00446 : m_serverExecutable(serverExecutable),
462
- <a name="l00447"></a>00447 m_spawnServerCommand(spawnServerCommand),
463
- <a name="l00448"></a>00448 m_logFile(logFile),
464
- <a name="l00449"></a>00449 m_environment(environment),
465
- <a name="l00450"></a>00450 m_rubyCommand(rubyCommand),
466
- <a name="l00451"></a>00451 m_user(user) {
467
- <a name="l00452"></a>00452 serverSocket = -1;
468
- <a name="l00453"></a>00453 serverPid = 0;
469
- <a name="l00454"></a>00454 restartServer();
470
- <a name="l00455"></a>00455 }
471
- <a name="l00456"></a>00456
472
- <a name="l00457"></a>00457 ~<a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a>() {
473
- <a name="l00458"></a>00458 <span class="keywordflow">if</span> (serverSocket != -1) {
279
+ <a name="l00262"></a>00262 mutex::scoped_lock l(data-&gt;lock);
280
+ <a name="l00263"></a>00263 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMax"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(max).c_str(), NULL);
281
+ <a name="l00264"></a>00264 }
282
+ <a name="l00265"></a>00265
283
+ <a name="l00266"></a>00266 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getActive()<span class="keyword"> const </span>{
284
+ <a name="l00267"></a>00267 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
285
+ <a name="l00268"></a>00268 mutex::scoped_lock l(data-&gt;lock);
286
+ <a name="l00269"></a>00269 vector&lt;string&gt; args;
287
+ <a name="l00270"></a>00270
288
+ <a name="l00271"></a>00271 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getActive"</span>, NULL);
289
+ <a name="l00272"></a>00272 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
290
+ <a name="l00273"></a>00273 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
291
+ <a name="l00274"></a>00274 }
292
+ <a name="l00275"></a>00275
293
+ <a name="l00276"></a>00276 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getCount()<span class="keyword"> const </span>{
294
+ <a name="l00277"></a>00277 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
295
+ <a name="l00278"></a>00278 mutex::scoped_lock l(data-&gt;lock);
296
+ <a name="l00279"></a>00279 vector&lt;string&gt; args;
297
+ <a name="l00280"></a>00280
298
+ <a name="l00281"></a>00281 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getCount"</span>, NULL);
299
+ <a name="l00282"></a>00282 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
300
+ <a name="l00283"></a>00283 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
301
+ <a name="l00284"></a>00284 }
302
+ <a name="l00285"></a>00285
303
+ <a name="l00286"></a>00286 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMaxPerApp(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max) {
304
+ <a name="l00287"></a>00287 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
305
+ <a name="l00288"></a>00288 mutex::scoped_lock l(data-&gt;lock);
306
+ <a name="l00289"></a>00289 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMaxPerApp"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(max).c_str(), NULL);
307
+ <a name="l00290"></a>00290 }
308
+ <a name="l00291"></a>00291
309
+ <a name="l00292"></a>00292 <span class="keyword">virtual</span> pid_t getSpawnServerPid()<span class="keyword"> const </span>{
310
+ <a name="l00293"></a>00293 <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;
311
+ <a name="l00294"></a>00294 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
312
+ <a name="l00295"></a>00295 mutex::scoped_lock l(data-&gt;lock);
313
+ <a name="l00296"></a>00296 vector&lt;string&gt; args;
314
+ <a name="l00297"></a>00297
315
+ <a name="l00298"></a>00298 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getSpawnServerPid"</span>, NULL);
316
+ <a name="l00299"></a>00299 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
317
+ <a name="l00300"></a>00300 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
318
+ <a name="l00301"></a>00301 }
319
+ <a name="l00302"></a>00302
320
+ <a name="l00303"></a>00303 <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>(
321
+ <a name="l00304"></a>00304 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appRoot,
322
+ <a name="l00305"></a>00305 <span class="keywordtype">bool</span> lowerPrivilege = <span class="keyword">true</span>,
323
+ <a name="l00306"></a>00306 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;lowestUser = <span class="stringliteral">"nobody"</span>,
324
+ <a name="l00307"></a>00307 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;environment = <span class="stringliteral">"production"</span>,
325
+ <a name="l00308"></a>00308 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnMethod = <span class="stringliteral">"smart"</span>,
326
+ <a name="l00309"></a>00309 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;appType = <span class="stringliteral">"rails"</span>
327
+ <a name="l00310"></a>00310 ) {
328
+ <a name="l00311"></a>00311 <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;
329
+ <a name="l00312"></a>00312 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data-&gt;server);
330
+ <a name="l00313"></a>00313 mutex::scoped_lock l(data-&gt;lock);
331
+ <a name="l00314"></a>00314 vector&lt;string&gt; args;
332
+ <a name="l00315"></a>00315 <span class="keywordtype">int</span> stream;
333
+ <a name="l00316"></a>00316 <span class="keywordtype">bool</span> result;
334
+ <a name="l00317"></a>00317
335
+ <a name="l00318"></a>00318 <span class="keywordflow">try</span> {
336
+ <a name="l00319"></a>00319 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"get"</span>, appRoot.c_str(),
337
+ <a name="l00320"></a>00320 (lowerPrivilege) ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>,
338
+ <a name="l00321"></a>00321 lowestUser.c_str(),
339
+ <a name="l00322"></a>00322 environment.c_str(),
340
+ <a name="l00323"></a>00323 spawnMethod.c_str(),
341
+ <a name="l00324"></a>00324 appType.c_str(),
342
+ <a name="l00325"></a>00325 NULL);
343
+ <a name="l00326"></a>00326 } <span class="keywordflow">catch</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;) {
344
+ <a name="l00327"></a>00327 <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>(<span class="stringliteral">"The ApplicationPool server exited unexpectedly."</span>);
345
+ <a name="l00328"></a>00328 }
346
+ <a name="l00329"></a>00329 <span class="keywordflow">try</span> {
347
+ <a name="l00330"></a>00330 result = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
348
+ <a name="l00331"></a>00331 } <span class="keywordflow">catch</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;e) {
349
+ <a name="l00332"></a>00332 <span class="keywordflow">throw</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>(<span class="stringliteral">"Could not read a message from "</span>
350
+ <a name="l00333"></a>00333 <span class="stringliteral">"the ApplicationPool server"</span>, e.<a class="code" href="classPassenger_1_1SystemException.html#ee7a6672bf79b72a4c3ee70c57d6a47c" title="The value of errno at the time the error occured.">code</a>());
351
+ <a name="l00334"></a>00334 }
352
+ <a name="l00335"></a>00335 <span class="keywordflow">if</span> (!result) {
353
+ <a name="l00336"></a>00336 <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>(<span class="stringliteral">"The ApplicationPool server unexpectedly "</span>
354
+ <a name="l00337"></a>00337 <span class="stringliteral">"closed the connection."</span>);
355
+ <a name="l00338"></a>00338 }
356
+ <a name="l00339"></a>00339 <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"ok"</span>) {
357
+ <a name="l00340"></a>00340 stream = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
358
+ <a name="l00341"></a>00341 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> RemoteSession(dataSmartPointer,
359
+ <a name="l00342"></a>00342 <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[1]), <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[2]), stream));
360
+ <a name="l00343"></a>00343 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"SpawnException"</span>) {
361
+ <a name="l00344"></a>00344 <span class="keywordflow">if</span> (args[2] == <span class="stringliteral">"true"</span>) {
362
+ <a name="l00345"></a>00345 <span class="keywordtype">string</span> errorPage;
363
+ <a name="l00346"></a>00346
364
+ <a name="l00347"></a>00347 <span class="keywordflow">if</span> (!channel.<a class="code" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc" title="Read a scalar message from the underlying file descriptor.">readScalar</a>(errorPage)) {
365
+ <a name="l00348"></a>00348 <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>(<span class="stringliteral">"The ApplicationPool server "</span>
366
+ <a name="l00349"></a>00349 <span class="stringliteral">"unexpectedly closed the connection."</span>);
367
+ <a name="l00350"></a>00350 }
368
+ <a name="l00351"></a>00351 <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>(args[1], errorPage);
369
+ <a name="l00352"></a>00352 } <span class="keywordflow">else</span> {
370
+ <a name="l00353"></a>00353 <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>(args[1]);
371
+ <a name="l00354"></a>00354 }
372
+ <a name="l00355"></a>00355 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"BusyException"</span>) {
373
+ <a name="l00356"></a>00356 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1BusyException.html" title="The application pool is too busy and cannot fulfill a get() request.">BusyException</a>(args[1]);
374
+ <a name="l00357"></a>00357 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"IOException"</span>) {
375
+ <a name="l00358"></a>00358 <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>(args[1]);
376
+ <a name="l00359"></a>00359 } <span class="keywordflow">else</span> {
377
+ <a name="l00360"></a>00360 <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>(<span class="stringliteral">"The ApplicationPool server returned "</span>
378
+ <a name="l00361"></a>00361 <span class="stringliteral">"an unknown message: "</span> + <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(args));
379
+ <a name="l00362"></a>00362 }
380
+ <a name="l00363"></a>00363 }
381
+ <a name="l00364"></a>00364 };
382
+ <a name="l00365"></a>00365
383
+ <a name="l00366"></a>00366
384
+ <a name="l00367"></a>00367 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> SERVER_SOCKET_FD = 3;
385
+ <a name="l00368"></a>00368
386
+ <a name="l00369"></a>00369 <span class="keywordtype">string</span> m_serverExecutable;
387
+ <a name="l00370"></a>00370 <span class="keywordtype">string</span> m_spawnServerCommand;
388
+ <a name="l00371"></a>00371 <span class="keywordtype">string</span> m_logFile;
389
+ <a name="l00372"></a>00372 <span class="keywordtype">string</span> m_rubyCommand;
390
+ <a name="l00373"></a>00373 <span class="keywordtype">string</span> m_user;
391
+ <a name="l00374"></a>00374 <span class="keywordtype">string</span> statusReportFIFO;
392
+ <a name="l00375"></a>00375 <span class="comment"></span>
393
+ <a name="l00376"></a>00376 <span class="comment"> /**</span>
394
+ <a name="l00377"></a>00377 <span class="comment"> * The PID of the ApplicationPool server process. If no server process</span>
395
+ <a name="l00378"></a>00378 <span class="comment"> * is running, then &lt;tt&gt;serverPid == 0&lt;/tt&gt;.</span>
396
+ <a name="l00379"></a>00379 <span class="comment"> *</span>
397
+ <a name="l00380"></a>00380 <span class="comment"> * @invariant</span>
398
+ <a name="l00381"></a>00381 <span class="comment"> * if serverPid == 0:</span>
399
+ <a name="l00382"></a>00382 <span class="comment"> * serverSocket == -1</span>
400
+ <a name="l00383"></a>00383 <span class="comment"> */</span>
401
+ <a name="l00384"></a>00384 pid_t serverPid;
402
+ <a name="l00385"></a>00385 <span class="comment"></span>
403
+ <a name="l00386"></a>00386 <span class="comment"> /**</span>
404
+ <a name="l00387"></a>00387 <span class="comment"> * The connection to the ApplicationPool server process. If no server</span>
405
+ <a name="l00388"></a>00388 <span class="comment"> * process is running, then &lt;tt&gt;serverSocket == -1&lt;/tt&gt;.</span>
406
+ <a name="l00389"></a>00389 <span class="comment"> *</span>
407
+ <a name="l00390"></a>00390 <span class="comment"> * @invariant</span>
408
+ <a name="l00391"></a>00391 <span class="comment"> * if serverPid == 0:</span>
409
+ <a name="l00392"></a>00392 <span class="comment"> * serverSocket == -1</span>
410
+ <a name="l00393"></a>00393 <span class="comment"> */</span>
411
+ <a name="l00394"></a>00394 <span class="keywordtype">int</span> serverSocket;
412
+ <a name="l00395"></a>00395 <span class="comment"></span>
413
+ <a name="l00396"></a>00396 <span class="comment"> /**</span>
414
+ <a name="l00397"></a>00397 <span class="comment"> * Shutdown the currently running ApplicationPool server process.</span>
415
+ <a name="l00398"></a>00398 <span class="comment"> *</span>
416
+ <a name="l00399"></a>00399 <span class="comment"> * @pre System call interruption is disabled.</span>
417
+ <a name="l00400"></a>00400 <span class="comment"> * @pre serverSocket != -1 &amp;&amp; serverPid != 0</span>
418
+ <a name="l00401"></a>00401 <span class="comment"> * @post serverSocket == -1 &amp;&amp; serverPid == 0</span>
419
+ <a name="l00402"></a>00402 <span class="comment"> */</span>
420
+ <a name="l00403"></a>00403 <span class="keywordtype">void</span> shutdownServer() {
421
+ <a name="l00404"></a>00404 <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;
422
+ <a name="l00405"></a>00405 <span class="keywordtype">int</span> ret;
423
+ <a name="l00406"></a>00406 time_t begin;
424
+ <a name="l00407"></a>00407 <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;
425
+ <a name="l00408"></a>00408
426
+ <a name="l00409"></a>00409 InterruptableCalls::close(serverSocket);
427
+ <a name="l00410"></a>00410 <span class="keywordflow">if</span> (!statusReportFIFO.empty()) {
428
+ <a name="l00411"></a>00411 <span class="keywordflow">do</span> {
429
+ <a name="l00412"></a>00412 ret = unlink(statusReportFIFO.c_str());
430
+ <a name="l00413"></a>00413 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EINTR);
431
+ <a name="l00414"></a>00414 }
432
+ <a name="l00415"></a>00415
433
+ <a name="l00416"></a>00416 P_TRACE(2, <span class="stringliteral">"Waiting for existing ApplicationPoolServerExecutable (PID "</span> &lt;&lt;
434
+ <a name="l00417"></a>00417 serverPid &lt;&lt; <span class="stringliteral">") to exit..."</span>);
435
+ <a name="l00418"></a>00418 begin = InterruptableCalls::time(NULL);
436
+ <a name="l00419"></a>00419 <span class="keywordflow">while</span> (!done &amp;&amp; InterruptableCalls::time(NULL) &lt; begin + 5) {
437
+ <a name="l00420"></a>00420 <span class="comment">/*</span>
438
+ <a name="l00421"></a>00421 <span class="comment"> * Some Apache modules fork(), but don't close file descriptors.</span>
439
+ <a name="l00422"></a>00422 <span class="comment"> * mod_wsgi is one such example. Because of that, closing serverSocket</span>
440
+ <a name="l00423"></a>00423 <span class="comment"> * won't always cause the ApplicationPool server to exit. So we send it a</span>
441
+ <a name="l00424"></a>00424 <span class="comment"> * signal.</span>
442
+ <a name="l00425"></a>00425 <span class="comment"> */</span>
443
+ <a name="l00426"></a>00426 InterruptableCalls::kill(serverPid, SIGINT);
444
+ <a name="l00427"></a>00427
445
+ <a name="l00428"></a>00428 ret = InterruptableCalls::waitpid(serverPid, NULL, WNOHANG);
446
+ <a name="l00429"></a>00429 done = ret &gt; 0 || ret == -1;
447
+ <a name="l00430"></a>00430 <span class="keywordflow">if</span> (!done) {
448
+ <a name="l00431"></a>00431 InterruptableCalls::usleep(100000);
449
+ <a name="l00432"></a>00432 }
450
+ <a name="l00433"></a>00433 }
451
+ <a name="l00434"></a>00434 <span class="keywordflow">if</span> (done) {
452
+ <a name="l00435"></a>00435 P_TRACE(2, <span class="stringliteral">"ApplicationPoolServerExecutable exited."</span>);
453
+ <a name="l00436"></a>00436 } <span class="keywordflow">else</span> {
454
+ <a name="l00437"></a>00437 P_DEBUG(<span class="stringliteral">"ApplicationPoolServerExecutable not exited in time. Killing it..."</span>);
455
+ <a name="l00438"></a>00438 InterruptableCalls::kill(serverPid, SIGTERM);
456
+ <a name="l00439"></a>00439 InterruptableCalls::waitpid(serverPid, NULL, 0);
457
+ <a name="l00440"></a>00440 }
458
+ <a name="l00441"></a>00441
459
+ <a name="l00442"></a>00442 serverSocket = -1;
460
+ <a name="l00443"></a>00443 serverPid = 0;
461
+ <a name="l00444"></a>00444 }
462
+ <a name="l00445"></a>00445 <span class="comment"></span>
463
+ <a name="l00446"></a>00446 <span class="comment"> /**</span>
464
+ <a name="l00447"></a>00447 <span class="comment"> * Start an ApplicationPool server process. If there's already one running,</span>
465
+ <a name="l00448"></a>00448 <span class="comment"> * then the currently running one will be shutdown.</span>
466
+ <a name="l00449"></a>00449 <span class="comment"> *</span>
467
+ <a name="l00450"></a>00450 <span class="comment"> * @pre System call interruption is disabled.</span>
468
+ <a name="l00451"></a>00451 <span class="comment"> * @post serverSocket != -1 &amp;&amp; serverPid != 0</span>
469
+ <a name="l00452"></a>00452 <span class="comment"> * @throw SystemException Something went wrong.</span>
470
+ <a name="l00453"></a>00453 <span class="comment"> */</span>
471
+ <a name="l00454"></a>00454 <span class="keywordtype">void</span> restartServer() {
472
+ <a name="l00455"></a>00455 <span class="keywordtype">int</span> fds[2];
473
+ <a name="l00456"></a>00456 pid_t pid;
474
+ <a name="l00457"></a>00457
475
+ <a name="l00458"></a>00458 <span class="keywordflow">if</span> (serverPid != 0) {
474
476
  <a name="l00459"></a>00459 shutdownServer();
475
477
  <a name="l00460"></a>00460 }
476
- <a name="l00461"></a>00461 }
477
- <a name="l00462"></a>00462 <span class="comment"></span>
478
- <a name="l00463"></a>00463 <span class="comment"> /**</span>
479
- <a name="l00464"></a>00464 <span class="comment"> * Connects to the server and returns a usable ApplicationPool object.</span>
480
- <a name="l00465"></a>00465 <span class="comment"> * All cache/pool data of this ApplicationPool is actually stored on</span>
481
- <a name="l00466"></a>00466 <span class="comment"> * the server and shared with other clients, but that is totally</span>
482
- <a name="l00467"></a>00467 <span class="comment"> * transparent to the user of the ApplicationPool object.</span>
483
- <a name="l00468"></a>00468 <span class="comment"> *</span>
484
- <a name="l00469"></a>00469 <span class="comment"> * @warning</span>
485
- <a name="l00470"></a>00470 <span class="comment"> * One may only use the returned ApplicationPool object for handling</span>
486
- <a name="l00471"></a>00471 <span class="comment"> * one session at a time. For example, don't do stuff like this:</span>
487
- <a name="l00472"></a>00472 <span class="comment"> * @code</span>
488
- <a name="l00473"></a>00473 <span class="comment"> * ApplicationPoolPtr pool = server.connect();</span>
489
- <a name="l00474"></a>00474 <span class="comment"> * Application::SessionPtr session1 = pool-&gt;get(...);</span>
490
- <a name="l00475"></a>00475 <span class="comment"> * Application::SessionPtr session2 = pool-&gt;get(...);</span>
491
- <a name="l00476"></a>00476 <span class="comment"> * @endcode</span>
492
- <a name="l00477"></a>00477 <span class="comment"> * Otherwise, a deadlock can occur under certain circumstances.</span>
493
- <a name="l00478"></a>00478 <span class="comment"> * @warning</span>
494
- <a name="l00479"></a>00479 <span class="comment"> * Instead, one should call connect() multiple times:</span>
495
- <a name="l00480"></a>00480 <span class="comment"> * @code</span>
496
- <a name="l00481"></a>00481 <span class="comment"> * ApplicationPoolPtr pool1 = server.connect();</span>
497
- <a name="l00482"></a>00482 <span class="comment"> * Application::SessionPtr session1 = pool1-&gt;get(...);</span>
498
- <a name="l00483"></a>00483 <span class="comment"> * </span>
499
- <a name="l00484"></a>00484 <span class="comment"> * ApplicationPoolPtr pool2 = server.connect();</span>
500
- <a name="l00485"></a>00485 <span class="comment"> * Application::SessionPtr session2 = pool2-&gt;get(...);</span>
501
- <a name="l00486"></a>00486 <span class="comment"> * @endcode</span>
502
- <a name="l00487"></a>00487 <span class="comment"> *</span>
503
- <a name="l00488"></a>00488 <span class="comment"> * @throws SystemException Something went wrong.</span>
504
- <a name="l00489"></a>00489 <span class="comment"> * @throws IOException Something went wrong.</span>
505
- <a name="l00490"></a>00490 <span class="comment"> */</span>
506
- <a name="l00491"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468">00491</a> ApplicationPoolPtr <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect</a>() {
507
- <a name="l00492"></a>00492 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(serverSocket);
508
- <a name="l00493"></a>00493 <span class="keywordtype">int</span> clientConnection;
509
- <a name="l00494"></a>00494
510
- <a name="l00495"></a>00495 <span class="comment">// Write some random data to wake up the server.</span>
511
- <a name="l00496"></a>00496 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#069314e4c7e1fe8c8ab36e16d2cc5fef" title="Send a block of data over the underlying file descriptor.">writeRaw</a>(<span class="stringliteral">"x"</span>, 1);
512
- <a name="l00497"></a>00497
513
- <a name="l00498"></a>00498 clientConnection = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
514
- <a name="l00499"></a>00499 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> Client(clientConnection));
515
- <a name="l00500"></a>00500 }
516
- <a name="l00501"></a>00501 <span class="comment"></span>
517
- <a name="l00502"></a>00502 <span class="comment"> /**</span>
518
- <a name="l00503"></a>00503 <span class="comment"> * Detach the server, thereby telling it that we don't want to connect</span>
519
- <a name="l00504"></a>00504 <span class="comment"> * to it anymore. This frees up some resources in the current process,</span>
520
- <a name="l00505"></a>00505 <span class="comment"> * such as file descriptors.</span>
521
- <a name="l00506"></a>00506 <span class="comment"> *</span>
522
- <a name="l00507"></a>00507 <span class="comment"> * This method is particularily useful to Apache worker processes that</span>
523
- <a name="l00508"></a>00508 <span class="comment"> * have just established a connection with the ApplicationPool server.</span>
524
- <a name="l00509"></a>00509 <span class="comment"> * Any sessions that are opened prior to calling detach(), will keep</span>
525
- <a name="l00510"></a>00510 <span class="comment"> * working even after a detach().</span>
526
- <a name="l00511"></a>00511 <span class="comment"> *</span>
527
- <a name="l00512"></a>00512 <span class="comment"> * This method may only be called once. The ApplicationPoolServer object</span>
528
- <a name="l00513"></a>00513 <span class="comment"> * will become unusable once detach() has been called, so call connect()</span>
529
- <a name="l00514"></a>00514 <span class="comment"> * before calling detach().</span>
530
- <a name="l00515"></a>00515 <span class="comment"> */</span>
531
- <a name="l00516"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce">00516</a> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server, thereby telling it that we don&amp;#39;t want to connect to it anymore...">detach</a>() {
532
- <a name="l00517"></a>00517 close(serverSocket);
533
- <a name="l00518"></a>00518 serverSocket = -1;
534
- <a name="l00519"></a>00519 }
535
- <a name="l00520"></a>00520 };
536
- <a name="l00521"></a>00521
537
- <a name="l00522"></a>00522 <span class="keyword">typedef</span> shared_ptr&lt;ApplicationPoolServer&gt; ApplicationPoolServerPtr;
538
- <a name="l00523"></a>00523
539
- <a name="l00524"></a>00524 } <span class="comment">// namespace Passenger</span>
540
- <a name="l00525"></a>00525
541
- <a name="l00526"></a>00526 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_APPLICATION_POOL_SERVER_H_ */</span>
542
- </pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Wed May 7 13:56:13 2008 for Passenger by&nbsp;
478
+ <a name="l00461"></a>00461
479
+ <a name="l00462"></a>00462 <span class="keywordflow">if</span> (InterruptableCalls::socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == -1) {
480
+ <a name="l00463"></a>00463 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot create a Unix socket pair"</span>, errno);
481
+ <a name="l00464"></a>00464 }
482
+ <a name="l00465"></a>00465
483
+ <a name="l00466"></a>00466 createStatusReportFIFO();
484
+ <a name="l00467"></a>00467
485
+ <a name="l00468"></a>00468 pid = InterruptableCalls::fork();
486
+ <a name="l00469"></a>00469 <span class="keywordflow">if</span> (pid == 0) { <span class="comment">// Child process.</span>
487
+ <a name="l00470"></a>00470 dup2(fds[0], SERVER_SOCKET_FD);
488
+ <a name="l00471"></a>00471
489
+ <a name="l00472"></a>00472 <span class="comment">// Close all unnecessary file descriptors</span>
490
+ <a name="l00473"></a>00473 <span class="keywordflow">for</span> (<span class="keywordtype">long</span> i = sysconf(_SC_OPEN_MAX) - 1; i &gt; SERVER_SOCKET_FD; i--) {
491
+ <a name="l00474"></a>00474 close(i);
492
+ <a name="l00475"></a>00475 }
493
+ <a name="l00476"></a>00476
494
+ <a name="l00477"></a>00477 execlp(
495
+ <a name="l00478"></a>00478 #<span class="keywordflow">if</span> 0
496
+ <a name="l00479"></a>00479 <span class="stringliteral">"valgrind"</span>,
497
+ <a name="l00480"></a>00480 <span class="stringliteral">"valgrind"</span>,
498
+ <a name="l00481"></a>00481 #<span class="keywordflow">else</span>
499
+ <a name="l00482"></a>00482 m_serverExecutable.c_str(),
500
+ <a name="l00483"></a>00483 <span class="preprocessor"> #endif</span>
501
+ <a name="l00484"></a>00484 <span class="preprocessor"></span> m_serverExecutable.c_str(),
502
+ <a name="l00485"></a>00485 <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(Passenger::getLogLevel()).c_str(),
503
+ <a name="l00486"></a>00486 m_spawnServerCommand.c_str(),
504
+ <a name="l00487"></a>00487 m_logFile.c_str(),
505
+ <a name="l00488"></a>00488 m_rubyCommand.c_str(),
506
+ <a name="l00489"></a>00489 m_user.c_str(),
507
+ <a name="l00490"></a>00490 statusReportFIFO.c_str(),
508
+ <a name="l00491"></a>00491 NULL);
509
+ <a name="l00492"></a>00492 <span class="keywordtype">int</span> e = errno;
510
+ <a name="l00493"></a>00493 fprintf(stderr, <span class="stringliteral">"*** Passenger ERROR: Cannot execute %s: %s (%d)\n"</span>,
511
+ <a name="l00494"></a>00494 m_serverExecutable.c_str(), strerror(e), e);
512
+ <a name="l00495"></a>00495 fflush(stderr);
513
+ <a name="l00496"></a>00496 _exit(1);
514
+ <a name="l00497"></a>00497 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pid == -1) { <span class="comment">// Error.</span>
515
+ <a name="l00498"></a>00498 InterruptableCalls::close(fds[0]);
516
+ <a name="l00499"></a>00499 InterruptableCalls::close(fds[1]);
517
+ <a name="l00500"></a>00500 <span class="keywordflow">throw</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>(<span class="stringliteral">"Cannot create a new process"</span>, errno);
518
+ <a name="l00501"></a>00501 } <span class="keywordflow">else</span> { <span class="comment">// Parent process.</span>
519
+ <a name="l00502"></a>00502 InterruptableCalls::close(fds[0]);
520
+ <a name="l00503"></a>00503 serverSocket = fds[1];
521
+ <a name="l00504"></a>00504 serverPid = pid;
522
+ <a name="l00505"></a>00505 }
523
+ <a name="l00506"></a>00506 }
524
+ <a name="l00507"></a>00507
525
+ <a name="l00508"></a>00508 <span class="keywordtype">void</span> createStatusReportFIFO() {
526
+ <a name="l00509"></a>00509 <span class="keywordtype">char</span> filename[PATH_MAX];
527
+ <a name="l00510"></a>00510 <span class="keywordtype">int</span> ret;
528
+ <a name="l00511"></a>00511
529
+ <a name="l00512"></a>00512 snprintf(filename, <span class="keyword">sizeof</span>(filename), <span class="stringliteral">"/tmp/passenger_status.%d.fifo"</span>,
530
+ <a name="l00513"></a>00513 getpid());
531
+ <a name="l00514"></a>00514 filename[PATH_MAX - 1] = <span class="charliteral">'\0'</span>;
532
+ <a name="l00515"></a>00515 <span class="keywordflow">do</span> {
533
+ <a name="l00516"></a>00516 ret = mkfifo(filename, S_IRUSR | S_IWUSR);
534
+ <a name="l00517"></a>00517 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EINTR);
535
+ <a name="l00518"></a>00518 <span class="keywordflow">if</span> (ret == -1 &amp;&amp; errno != EEXIST) {
536
+ <a name="l00519"></a>00519 <span class="keywordtype">int</span> e = errno;
537
+ <a name="l00520"></a>00520 P_WARN(<span class="stringliteral">"*** WARNING: Could not create FIFO '"</span> &lt;&lt; filename &lt;&lt;
538
+ <a name="l00521"></a>00521 <span class="stringliteral">"': "</span> &lt;&lt; strerror(e) &lt;&lt; <span class="stringliteral">" ("</span> &lt;&lt; e &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl &lt;&lt;
539
+ <a name="l00522"></a>00522 <span class="stringliteral">"Disabling Passenger ApplicationPool status reporting."</span>);
540
+ <a name="l00523"></a>00523 statusReportFIFO = <span class="stringliteral">""</span>;
541
+ <a name="l00524"></a>00524 } <span class="keywordflow">else</span> {
542
+ <a name="l00525"></a>00525 statusReportFIFO = filename;
543
+ <a name="l00526"></a>00526 }
544
+ <a name="l00527"></a>00527 }
545
+ <a name="l00528"></a>00528
546
+ <a name="l00529"></a>00529 <span class="keyword">public</span>:<span class="comment"></span>
547
+ <a name="l00530"></a>00530 <span class="comment"> /**</span>
548
+ <a name="l00531"></a>00531 <span class="comment"> * Create a new ApplicationPoolServer object.</span>
549
+ <a name="l00532"></a>00532 <span class="comment"> *</span>
550
+ <a name="l00533"></a>00533 <span class="comment"> * @param serverExecutable The filename of the ApplicationPool server</span>
551
+ <a name="l00534"></a>00534 <span class="comment"> * executable to use.</span>
552
+ <a name="l00535"></a>00535 <span class="comment"> * @param spawnServerCommand The filename of the spawn server to use.</span>
553
+ <a name="l00536"></a>00536 <span class="comment"> * @param logFile Specify a log file that the spawn server should use.</span>
554
+ <a name="l00537"></a>00537 <span class="comment"> * Messages on its standard output and standard error channels</span>
555
+ <a name="l00538"></a>00538 <span class="comment"> * will be written to this log file. If an empty string is</span>
556
+ <a name="l00539"></a>00539 <span class="comment"> * specified, no log file will be used, and the spawn server</span>
557
+ <a name="l00540"></a>00540 <span class="comment"> * will use the same standard output/error channels as the</span>
558
+ <a name="l00541"></a>00541 <span class="comment"> * current process.</span>
559
+ <a name="l00542"></a>00542 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
560
+ <a name="l00543"></a>00543 <span class="comment"> * @param user The user that the spawn manager should run as. This</span>
561
+ <a name="l00544"></a>00544 <span class="comment"> * parameter only has effect if the current process is</span>
562
+ <a name="l00545"></a>00545 <span class="comment"> * running as root. If the empty string is given, or if</span>
563
+ <a name="l00546"></a>00546 <span class="comment"> * the &lt;tt&gt;user&lt;/tt&gt; is not a valid username, then</span>
564
+ <a name="l00547"></a>00547 <span class="comment"> * the spawn manager will be run as the current user.</span>
565
+ <a name="l00548"></a>00548 <span class="comment"> * @throws SystemException An error occured while trying to setup the spawn server</span>
566
+ <a name="l00549"></a>00549 <span class="comment"> * or the server socket.</span>
567
+ <a name="l00550"></a>00550 <span class="comment"> * @throws IOException The specified log file could not be opened.</span>
568
+ <a name="l00551"></a>00551 <span class="comment"> */</span>
569
+ <a name="l00552"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#2203db62a022579d569ceddff8ef6ca9">00552</a> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#2203db62a022579d569ceddff8ef6ca9" title="Create a new ApplicationPoolServer object.">ApplicationPoolServer</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;serverExecutable,
570
+ <a name="l00553"></a>00553 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;spawnServerCommand,
571
+ <a name="l00554"></a>00554 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;logFile = <span class="stringliteral">""</span>,
572
+ <a name="l00555"></a>00555 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;rubyCommand = <span class="stringliteral">"ruby"</span>,
573
+ <a name="l00556"></a>00556 <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;user = <span class="stringliteral">""</span>)
574
+ <a name="l00557"></a>00557 : m_serverExecutable(serverExecutable),
575
+ <a name="l00558"></a>00558 m_spawnServerCommand(spawnServerCommand),
576
+ <a name="l00559"></a>00559 m_logFile(logFile),
577
+ <a name="l00560"></a>00560 m_rubyCommand(rubyCommand),
578
+ <a name="l00561"></a>00561 m_user(user) {
579
+ <a name="l00562"></a>00562 serverSocket = -1;
580
+ <a name="l00563"></a>00563 serverPid = 0;
581
+ <a name="l00564"></a>00564 <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;
582
+ <a name="l00565"></a>00565 restartServer();
583
+ <a name="l00566"></a>00566 }
584
+ <a name="l00567"></a>00567
585
+ <a name="l00568"></a>00568 ~<a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a>() {
586
+ <a name="l00569"></a>00569 <span class="keywordflow">if</span> (serverSocket != -1) {
587
+ <a name="l00570"></a>00570 <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;
588
+ <a name="l00571"></a>00571 shutdownServer();
589
+ <a name="l00572"></a>00572 }
590
+ <a name="l00573"></a>00573 }
591
+ <a name="l00574"></a>00574 <span class="comment"></span>
592
+ <a name="l00575"></a>00575 <span class="comment"> /**</span>
593
+ <a name="l00576"></a>00576 <span class="comment"> * Connects to the server and returns a usable ApplicationPool object.</span>
594
+ <a name="l00577"></a>00577 <span class="comment"> * All cache/pool data of this ApplicationPool is actually stored on</span>
595
+ <a name="l00578"></a>00578 <span class="comment"> * the server and shared with other clients, but that is totally</span>
596
+ <a name="l00579"></a>00579 <span class="comment"> * transparent to the user of the ApplicationPool object.</span>
597
+ <a name="l00580"></a>00580 <span class="comment"> *</span>
598
+ <a name="l00581"></a>00581 <span class="comment"> * @note</span>
599
+ <a name="l00582"></a>00582 <span class="comment"> * All methods of the returned ApplicationPool object may throw</span>
600
+ <a name="l00583"></a>00583 <span class="comment"> * SystemException, IOException or boost::thread_interrupted.</span>
601
+ <a name="l00584"></a>00584 <span class="comment"> *</span>
602
+ <a name="l00585"></a>00585 <span class="comment"> * @warning</span>
603
+ <a name="l00586"></a>00586 <span class="comment"> * One may only use the returned ApplicationPool object for handling</span>
604
+ <a name="l00587"></a>00587 <span class="comment"> * one session at a time. For example, don't do stuff like this:</span>
605
+ <a name="l00588"></a>00588 <span class="comment"> * @code</span>
606
+ <a name="l00589"></a>00589 <span class="comment"> * ApplicationPoolPtr pool = server.connect();</span>
607
+ <a name="l00590"></a>00590 <span class="comment"> * Application::SessionPtr session1 = pool-&gt;get(...);</span>
608
+ <a name="l00591"></a>00591 <span class="comment"> * Application::SessionPtr session2 = pool-&gt;get(...);</span>
609
+ <a name="l00592"></a>00592 <span class="comment"> * @endcode</span>
610
+ <a name="l00593"></a>00593 <span class="comment"> * Otherwise, a deadlock can occur under certain circumstances.</span>
611
+ <a name="l00594"></a>00594 <span class="comment"> * @warning</span>
612
+ <a name="l00595"></a>00595 <span class="comment"> * Instead, one should call connect() multiple times:</span>
613
+ <a name="l00596"></a>00596 <span class="comment"> * @code</span>
614
+ <a name="l00597"></a>00597 <span class="comment"> * ApplicationPoolPtr pool1 = server.connect();</span>
615
+ <a name="l00598"></a>00598 <span class="comment"> * Application::SessionPtr session1 = pool1-&gt;get(...);</span>
616
+ <a name="l00599"></a>00599 <span class="comment"> * </span>
617
+ <a name="l00600"></a>00600 <span class="comment"> * ApplicationPoolPtr pool2 = server.connect();</span>
618
+ <a name="l00601"></a>00601 <span class="comment"> * Application::SessionPtr session2 = pool2-&gt;get(...);</span>
619
+ <a name="l00602"></a>00602 <span class="comment"> * @endcode</span>
620
+ <a name="l00603"></a>00603 <span class="comment"> *</span>
621
+ <a name="l00604"></a>00604 <span class="comment"> * @throws SystemException Something went wrong.</span>
622
+ <a name="l00605"></a>00605 <span class="comment"> * @throws IOException Something went wrong.</span>
623
+ <a name="l00606"></a>00606 <span class="comment"> */</span>
624
+ <a name="l00607"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468">00607</a> ApplicationPoolPtr <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect</a>() {
625
+ <a name="l00608"></a>00608 <span class="keywordflow">try</span> {
626
+ <a name="l00609"></a>00609 <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;
627
+ <a name="l00610"></a>00610 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(serverSocket);
628
+ <a name="l00611"></a>00611 <span class="keywordtype">int</span> clientConnection;
629
+ <a name="l00612"></a>00612
630
+ <a name="l00613"></a>00613 <span class="comment">// Write some random data to wake up the server.</span>
631
+ <a name="l00614"></a>00614 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#069314e4c7e1fe8c8ab36e16d2cc5fef" title="Send a block of data over the underlying file descriptor.">writeRaw</a>(<span class="stringliteral">"x"</span>, 1);
632
+ <a name="l00615"></a>00615
633
+ <a name="l00616"></a>00616 clientConnection = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
634
+ <a name="l00617"></a>00617 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> Client(clientConnection));
635
+ <a name="l00618"></a>00618 } <span class="keywordflow">catch</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;e) {
636
+ <a name="l00619"></a>00619 <span class="keywordflow">throw</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>(<span class="stringliteral">"Could not connect to the ApplicationPool server"</span>, e.<a class="code" href="classPassenger_1_1SystemException.html#ee7a6672bf79b72a4c3ee70c57d6a47c" title="The value of errno at the time the error occured.">code</a>());
637
+ <a name="l00620"></a>00620 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a> &amp;e) {
638
+ <a name="l00621"></a>00621 <span class="keywordtype">string</span> message(<span class="stringliteral">"Could not connect to the ApplicationPool server: "</span>);
639
+ <a name="l00622"></a>00622 message.append(e.<a class="code" href="classPassenger_1_1IOException.html#1b65d0fdb9bc5136f5b7df759c14768a">what</a>());
640
+ <a name="l00623"></a>00623 <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);
641
+ <a name="l00624"></a>00624 }
642
+ <a name="l00625"></a>00625 }
643
+ <a name="l00626"></a>00626 <span class="comment"></span>
644
+ <a name="l00627"></a>00627 <span class="comment"> /**</span>
645
+ <a name="l00628"></a>00628 <span class="comment"> * Detach the server, thereby telling it that we don't want to connect</span>
646
+ <a name="l00629"></a>00629 <span class="comment"> * to it anymore. This frees up some resources in the current process,</span>
647
+ <a name="l00630"></a>00630 <span class="comment"> * such as file descriptors.</span>
648
+ <a name="l00631"></a>00631 <span class="comment"> *</span>
649
+ <a name="l00632"></a>00632 <span class="comment"> * This method is particularily useful to Apache worker processes that</span>
650
+ <a name="l00633"></a>00633 <span class="comment"> * have just established a connection with the ApplicationPool server.</span>
651
+ <a name="l00634"></a>00634 <span class="comment"> * Any sessions that are opened prior to calling detach(), will keep</span>
652
+ <a name="l00635"></a>00635 <span class="comment"> * working even after a detach().</span>
653
+ <a name="l00636"></a>00636 <span class="comment"> *</span>
654
+ <a name="l00637"></a>00637 <span class="comment"> * This method may only be called once. The ApplicationPoolServer object</span>
655
+ <a name="l00638"></a>00638 <span class="comment"> * will become unusable once detach() has been called, so call connect()</span>
656
+ <a name="l00639"></a>00639 <span class="comment"> * before calling detach().</span>
657
+ <a name="l00640"></a>00640 <span class="comment"> */</span>
658
+ <a name="l00641"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce">00641</a> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server, thereby telling it that we don&amp;#39;t want to connect to it anymore...">detach</a>() {
659
+ <a name="l00642"></a>00642 <span class="keywordtype">int</span> ret;
660
+ <a name="l00643"></a>00643 <span class="keywordflow">do</span> {
661
+ <a name="l00644"></a>00644 ret = close(serverSocket);
662
+ <a name="l00645"></a>00645 } <span class="keywordflow">while</span> (ret == -1 &amp;&amp; errno == EINTR);
663
+ <a name="l00646"></a>00646 serverSocket = -1;
664
+ <a name="l00647"></a>00647 }
665
+ <a name="l00648"></a>00648 };
666
+ <a name="l00649"></a>00649
667
+ <a name="l00650"></a>00650 <span class="keyword">typedef</span> shared_ptr&lt;ApplicationPoolServer&gt; ApplicationPoolServerPtr;
668
+ <a name="l00651"></a>00651
669
+ <a name="l00652"></a>00652 } <span class="comment">// namespace Passenger</span>
670
+ <a name="l00653"></a>00653
671
+ <a name="l00654"></a>00654 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_APPLICATION_POOL_SERVER_H_ */</span>
672
+ </pre></div></div>
673
+ <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 24 14:03:42 2008 for Passenger by&nbsp;
543
674
  <a href="http://www.doxygen.org/index.html">
544
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
675
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
545
676
  </body>
546
677
  </html>