passenger 3.0.0.pre1 → 3.0.0.pre2

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 (189) hide show
  1. data/DEVELOPERS.TXT +2 -2
  2. data/NEWS +2 -2
  3. data/Rakefile +1 -1
  4. data/build/packaging.rb +1 -1
  5. data/doc/Users guide Apache.html +22 -22
  6. data/doc/Users guide Apache.txt +2 -2
  7. data/doc/Users guide Nginx.html +14 -14
  8. data/doc/Users guide Nginx.txt +3 -2
  9. data/doc/Users guide Standalone.html +1 -1
  10. data/doc/cxxapi/Constants_8h_source.html +1 -1
  11. data/doc/cxxapi/ResourceLocator_8h_source.html +1 -1
  12. data/doc/rdoc/classes/ConditionVariable.html +215 -0
  13. data/doc/rdoc/classes/Exception.html +120 -0
  14. data/doc/rdoc/classes/GC.html +113 -0
  15. data/doc/rdoc/classes/IO.html +221 -0
  16. data/doc/rdoc/classes/PhusionPassenger.html +368 -0
  17. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +180 -0
  18. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +647 -0
  19. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +654 -0
  20. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +92 -0
  21. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
  22. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
  23. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
  24. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
  25. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +619 -0
  26. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +142 -0
  27. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +368 -0
  28. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +231 -0
  29. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +588 -0
  30. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +92 -0
  31. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +92 -0
  32. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +147 -0
  33. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +279 -0
  34. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +92 -0
  35. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +92 -0
  36. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +123 -0
  37. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +92 -0
  38. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +341 -0
  39. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +294 -0
  40. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +199 -0
  41. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +155 -0
  42. data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +367 -0
  43. data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +95 -0
  44. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +351 -0
  45. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +98 -0
  46. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +200 -0
  47. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +410 -0
  48. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +98 -0
  49. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +156 -0
  50. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +115 -0
  51. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +202 -0
  52. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
  53. data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +273 -0
  54. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
  55. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +162 -0
  56. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
  57. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  58. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +673 -0
  59. data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +92 -0
  60. data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +415 -0
  61. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +494 -0
  62. data/doc/rdoc/classes/PhusionPassenger/NativeSupport/FileSystemWatcher.html +96 -0
  63. data/doc/rdoc/classes/PhusionPassenger/Packaging.html +129 -0
  64. data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +1758 -0
  65. data/doc/rdoc/classes/PhusionPassenger/Plugin.html +237 -0
  66. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  67. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +312 -0
  68. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +98 -0
  69. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +218 -0
  70. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +114 -0
  71. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +256 -0
  72. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +139 -0
  73. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +118 -0
  74. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +135 -0
  75. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +378 -0
  76. data/doc/rdoc/classes/PhusionPassenger/Standalone.html +111 -0
  77. data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +252 -0
  78. data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +161 -0
  79. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +368 -0
  80. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +132 -0
  81. data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +151 -0
  82. data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +189 -0
  83. data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +177 -0
  84. data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +341 -0
  85. data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +203 -0
  86. data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +156 -0
  87. data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +168 -0
  88. data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +86 -0
  89. data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +135 -0
  90. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
  91. data/doc/rdoc/classes/PhusionPassenger/Utils.html +1468 -0
  92. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +204 -0
  93. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +171 -0
  94. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +140 -0
  95. data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +260 -0
  96. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +169 -0
  97. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +265 -0
  98. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +120 -0
  99. data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +561 -0
  100. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
  101. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  102. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +182 -0
  103. data/doc/rdoc/classes/Process.html +115 -0
  104. data/doc/rdoc/classes/Signal.html +139 -0
  105. data/doc/rdoc/created.rid +1 -0
  106. data/doc/rdoc/files/DEVELOPERS_TXT.html +276 -0
  107. data/doc/rdoc/files/README.html +157 -0
  108. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +92 -0
  109. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +130 -0
  110. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +135 -0
  111. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
  112. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
  113. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +126 -0
  114. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +132 -0
  115. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
  116. data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +129 -0
  117. data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +127 -0
  118. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +141 -0
  119. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +126 -0
  120. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +146 -0
  121. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +125 -0
  122. data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +132 -0
  123. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
  124. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
  125. data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +122 -0
  126. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +147 -0
  127. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
  128. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +127 -0
  129. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
  130. data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +127 -0
  131. data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +131 -0
  132. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
  133. data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +127 -0
  134. data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +129 -0
  135. data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +126 -0
  136. data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +126 -0
  137. data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +126 -0
  138. data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +126 -0
  139. data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +127 -0
  140. data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +128 -0
  141. data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +126 -0
  142. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +122 -0
  143. data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +127 -0
  144. data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +127 -0
  145. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +137 -0
  146. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
  147. data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +127 -0
  148. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
  149. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +160 -0
  150. data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +127 -0
  151. data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +135 -0
  152. data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +126 -0
  153. data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +126 -0
  154. data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +126 -0
  155. data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +127 -0
  156. data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +132 -0
  157. data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +136 -0
  158. data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +126 -0
  159. data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +126 -0
  160. data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +126 -0
  161. data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +127 -0
  162. data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +126 -0
  163. data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +120 -0
  164. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +100 -0
  165. data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +122 -0
  166. data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +126 -0
  167. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +179 -0
  168. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +132 -0
  169. data/doc/rdoc/fr_class_index.html +139 -0
  170. data/doc/rdoc/fr_file_index.html +109 -0
  171. data/doc/rdoc/fr_method_index.html +435 -0
  172. data/doc/rdoc/index.html +26 -0
  173. data/doc/rdoc/rdoc-style.css +187 -0
  174. data/ext/apache2/Configuration.hpp +1 -1
  175. data/ext/apache2/Hooks.cpp +24 -2
  176. data/ext/common/AgentsStarter.hpp +57 -20
  177. data/ext/common/Constants.h +1 -1
  178. data/ext/common/ResourceLocator.h +1 -1
  179. data/ext/common/Utils/MemZeroGuard.h +1 -1
  180. data/ext/phusion_passenger/native_support.c +1 -1
  181. data/lib/phusion_passenger.rb +2 -2
  182. data/lib/phusion_passenger/abstract_installer.rb +1 -1
  183. data/lib/phusion_passenger/platform_info/apache.rb +3 -0
  184. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -1
  185. data/lib/phusion_passenger/platform_info/compiler.rb +25 -2
  186. data/lib/phusion_passenger/platform_info/ruby.rb +88 -14
  187. data/lib/phusion_passenger/templates/standalone/config.erb +9 -16
  188. metadata +166 -5
  189. data/ext/common/Utils/foo.cpp +0 -10
@@ -0,0 +1,120 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Class: PhusionPassenger::Utils::RewindableInput::Tempfile</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Class</span><br />PhusionPassenger::Utils::RewindableInput::Tempfile</td>
55
+ <td align="right">
56
+ <table cellspacing="0" cellpadding="2">
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../../../../files/lib/phusion_passenger/utils/rewindable_input_rb.html">lib/phusion_passenger/utils/rewindable_input.rb</a>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>Parent:</td>
65
+ <td>
66
+ ::Tempfile
67
+ </td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+ <div id="content">
77
+
78
+ <div class="description"><p>
79
+ Many Ruby 1.8&#8216;s tempfile libraries have a bug that can cause the
80
+ #close method to raise an exception. Subclass it and fix it.
81
+ </p>
82
+ </div>
83
+
84
+
85
+
86
+ <div class="sectiontitle">Methods</div>
87
+ <ul>
88
+ <li><a href="#M000245">_close</a></li>
89
+ </ul>
90
+
91
+
92
+
93
+
94
+
95
+
96
+ <div class="sectiontitle">Public Instance methods</div>
97
+ <div class="method">
98
+ <div class="title">
99
+ <a name="M000245"></a><b>_close</b>()
100
+ </div>
101
+ <div class="sourcecode">
102
+ <p class="source-link">[ <a href="javascript:toggleSource('M000245_source')" id="l_M000245_source">show source</a> ]</p>
103
+ <div id="M000245_source" class="dyn-source">
104
+ <pre>
105
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/rewindable_input.rb, line 72</span>
106
+ 72: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_close</span>
107
+ 73: <span class="ruby-ivar">@tmpfile</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tmpfile</span>
108
+ 74: <span class="ruby-ivar">@data</span>[<span class="ruby-value">1</span>] = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@data</span>
109
+ 75: <span class="ruby-ivar">@tmpfile</span> = <span class="ruby-keyword kw">nil</span>
110
+ 76: <span class="ruby-keyword kw">end</span>
111
+ </pre>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </div>
116
+
117
+ </div>
118
+
119
+ </body>
120
+ </html>
@@ -0,0 +1,561 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Class: PhusionPassenger::Utils::UnseekableSocket</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Class</span><br />PhusionPassenger::Utils::UnseekableSocket</td>
55
+ <td align="right">
56
+ <table cellspacing="0" cellpadding="2">
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../../../files/lib/phusion_passenger/utils/unseekable_socket_rb.html">lib/phusion_passenger/utils/unseekable_socket.rb</a>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>Parent:</td>
65
+ <td>
66
+ Object
67
+ </td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+ <div id="content">
77
+
78
+ <div class="description"><p>
79
+ Some frameworks (e.g. Merb) call <em>seek</em> and <em>rewind</em> on the
80
+ input stream if it responds to these methods. In case of Phusion Passenger,
81
+ the input stream is a socket, and altough socket objects respond to
82
+ <em>seek</em> and <em>rewind</em>, calling these methods will raise an
83
+ exception. We don&#8216;t want this to happen so in <a
84
+ href="../AbstractRequestHandler.html">AbstractRequestHandler</a> we <a
85
+ href="UnseekableSocket.html#M000250">wrap</a> the client socket into an <a
86
+ href="UnseekableSocket.html">UnseekableSocket</a> wrapper, which
87
+ doesn&#8216;t respond to these methods.
88
+ </p>
89
+ <p>
90
+ We used to dynamically undef <em>seek</em> and <em>rewind</em> on sockets,
91
+ but this blows the Ruby interpreter&#8216;s method cache and made things
92
+ slower. Wrapping a socket is faster despite extra method calls.
93
+ </p>
94
+ <p>
95
+ Furthermore, all exceptions originating from the wrapped socket will be
96
+ annotated. One can check whether a certain exception originates from the
97
+ wrapped socket by calling #source_of_exception?
98
+ </p>
99
+ </div>
100
+
101
+
102
+
103
+ <div class="sectiontitle">Methods</div>
104
+ <ul>
105
+ <li><a href="#M000256">addr</a></li>
106
+ <li><a href="#M000254">binmode</a></li>
107
+ <li><a href="#M000268">close</a></li>
108
+ <li><a href="#M000269">close_read</a></li>
109
+ <li><a href="#M000270">close_write</a></li>
110
+ <li><a href="#M000267">closed?</a></li>
111
+ <li><a href="#M000266">each</a></li>
112
+ <li><a href="#M000253">flush</a></li>
113
+ <li><a href="#M000262">gets</a></li>
114
+ <li><a href="#M000261">puts</a></li>
115
+ <li><a href="#M000263">read</a></li>
116
+ <li><a href="#M000265">readline</a></li>
117
+ <li><a href="#M000264">readpartial</a></li>
118
+ <li><a href="#M000271">source_of_exception?</a></li>
119
+ <li><a href="#M000252">sync=</a></li>
120
+ <li><a href="#M000255">to_io</a></li>
121
+ <li><a href="#M000251">wrap</a></li>
122
+ <li><a href="#M000250">wrap</a></li>
123
+ <li><a href="#M000257">write</a></li>
124
+ <li><a href="#M000258">writev</a></li>
125
+ <li><a href="#M000259">writev2</a></li>
126
+ <li><a href="#M000260">writev3</a></li>
127
+ </ul>
128
+
129
+
130
+
131
+
132
+
133
+
134
+ <div class="sectiontitle">Public Class methods</div>
135
+ <div class="method">
136
+ <div class="title">
137
+ <a name="M000250"></a><b>wrap</b>(socket)
138
+ </div>
139
+ <div class="sourcecode">
140
+ <p class="source-link">[ <a href="javascript:toggleSource('M000250_source')" id="l_M000250_source">show source</a> ]</p>
141
+ <div id="M000250_source" class="dyn-source">
142
+ <pre>
143
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 44</span>
144
+ 44: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">wrap</span>(<span class="ruby-identifier">socket</span>)
145
+ 45: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">new</span>.<span class="ruby-identifier">wrap</span>(<span class="ruby-identifier">socket</span>)
146
+ 46: <span class="ruby-keyword kw">end</span>
147
+ </pre>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ <div class="sectiontitle">Public Instance methods</div>
152
+ <div class="method">
153
+ <div class="title">
154
+ <a name="M000256"></a><b>addr</b>()
155
+ </div>
156
+ <div class="sourcecode">
157
+ <p class="source-link">[ <a href="javascript:toggleSource('M000256_source')" id="l_M000256_source">show source</a> ]</p>
158
+ <div id="M000256_source" class="dyn-source">
159
+ <pre>
160
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 94</span>
161
+ 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addr</span>
162
+ 95: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">addr</span>
163
+ 96: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
164
+ 97: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
165
+ 98: <span class="ruby-keyword kw">end</span>
166
+ </pre>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ <div class="method">
171
+ <div class="title">
172
+ <a name="M000254"></a><b>binmode</b>()
173
+ </div>
174
+ <div class="description">
175
+ <p>
176
+ Already set to binary mode.
177
+ </p>
178
+ </div>
179
+ <div class="sourcecode">
180
+ <p class="source-link">[ <a href="javascript:toggleSource('M000254_source')" id="l_M000254_source">show source</a> ]</p>
181
+ <div id="M000254_source" class="dyn-source">
182
+ <pre>
183
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 87</span>
184
+ 87: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">binmode</span>
185
+ 88: <span class="ruby-keyword kw">end</span>
186
+ </pre>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ <div class="method">
191
+ <div class="title">
192
+ <a name="M000268"></a><b>close</b>()
193
+ </div>
194
+ <div class="sourcecode">
195
+ <p class="source-link">[ <a href="javascript:toggleSource('M000268_source')" id="l_M000268_source">show source</a> ]</p>
196
+ <div id="M000268_source" class="dyn-source">
197
+ <pre>
198
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 166</span>
199
+ 166: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
200
+ 167: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span>
201
+ 168: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
202
+ 169: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
203
+ 170: <span class="ruby-keyword kw">end</span>
204
+ </pre>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ <div class="method">
209
+ <div class="title">
210
+ <a name="M000269"></a><b>close_read</b>()
211
+ </div>
212
+ <div class="sourcecode">
213
+ <p class="source-link">[ <a href="javascript:toggleSource('M000269_source')" id="l_M000269_source">show source</a> ]</p>
214
+ <div id="M000269_source" class="dyn-source">
215
+ <pre>
216
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 172</span>
217
+ 172: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close_read</span>
218
+ 173: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close_read</span>
219
+ 174: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
220
+ 175: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
221
+ 176: <span class="ruby-keyword kw">end</span>
222
+ </pre>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ <div class="method">
227
+ <div class="title">
228
+ <a name="M000270"></a><b>close_write</b>()
229
+ </div>
230
+ <div class="sourcecode">
231
+ <p class="source-link">[ <a href="javascript:toggleSource('M000270_source')" id="l_M000270_source">show source</a> ]</p>
232
+ <div id="M000270_source" class="dyn-source">
233
+ <pre>
234
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 178</span>
235
+ 178: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close_write</span>
236
+ 179: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close_write</span>
237
+ 180: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
238
+ 181: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
239
+ 182: <span class="ruby-keyword kw">end</span>
240
+ </pre>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ <div class="method">
245
+ <div class="title">
246
+ <a name="M000267"></a><b>closed?</b>()
247
+ </div>
248
+ <div class="sourcecode">
249
+ <p class="source-link">[ <a href="javascript:toggleSource('M000267_source')" id="l_M000267_source">show source</a> ]</p>
250
+ <div id="M000267_source" class="dyn-source">
251
+ <pre>
252
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 160</span>
253
+ 160: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">closed?</span>
254
+ 161: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">closed?</span>
255
+ 162: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
256
+ 163: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
257
+ 164: <span class="ruby-keyword kw">end</span>
258
+ </pre>
259
+ </div>
260
+ </div>
261
+ </div>
262
+ <div class="method">
263
+ <div class="title">
264
+ <a name="M000266"></a><b>each</b>(&amp;block)
265
+ </div>
266
+ <div class="sourcecode">
267
+ <p class="source-link">[ <a href="javascript:toggleSource('M000266_source')" id="l_M000266_source">show source</a> ]</p>
268
+ <div id="M000266_source" class="dyn-source">
269
+ <pre>
270
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 154</span>
271
+ 154: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
272
+ 155: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">each</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
273
+ 156: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
274
+ 157: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
275
+ 158: <span class="ruby-keyword kw">end</span>
276
+ </pre>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ <div class="method">
281
+ <div class="title">
282
+ <a name="M000253"></a><b>flush</b>()
283
+ </div>
284
+ <div class="description">
285
+ <p>
286
+ Socket is sync&#8216;ed so flushing shouldn&#8216;t do anything.
287
+ </p>
288
+ </div>
289
+ <div class="sourcecode">
290
+ <p class="source-link">[ <a href="javascript:toggleSource('M000253_source')" id="l_M000253_source">show source</a> ]</p>
291
+ <div id="M000253_source" class="dyn-source">
292
+ <pre>
293
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 83</span>
294
+ 83: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">flush</span>
295
+ 84: <span class="ruby-keyword kw">end</span>
296
+ </pre>
297
+ </div>
298
+ </div>
299
+ </div>
300
+ <div class="method">
301
+ <div class="title">
302
+ <a name="M000262"></a><b>gets</b>()
303
+ </div>
304
+ <div class="sourcecode">
305
+ <p class="source-link">[ <a href="javascript:toggleSource('M000262_source')" id="l_M000262_source">show source</a> ]</p>
306
+ <div id="M000262_source" class="dyn-source">
307
+ <pre>
308
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 130</span>
309
+ 130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">gets</span>
310
+ 131: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">gets</span>
311
+ 132: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
312
+ 133: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
313
+ 134: <span class="ruby-keyword kw">end</span>
314
+ </pre>
315
+ </div>
316
+ </div>
317
+ </div>
318
+ <div class="method">
319
+ <div class="title">
320
+ <a name="M000261"></a><b>puts</b>(*args)
321
+ </div>
322
+ <div class="sourcecode">
323
+ <p class="source-link">[ <a href="javascript:toggleSource('M000261_source')" id="l_M000261_source">show source</a> ]</p>
324
+ <div id="M000261_source" class="dyn-source">
325
+ <pre>
326
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 124</span>
327
+ 124: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
328
+ 125: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
329
+ 126: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
330
+ 127: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
331
+ 128: <span class="ruby-keyword kw">end</span>
332
+ </pre>
333
+ </div>
334
+ </div>
335
+ </div>
336
+ <div class="method">
337
+ <div class="title">
338
+ <a name="M000263"></a><b>read</b>(*args)
339
+ </div>
340
+ <div class="sourcecode">
341
+ <p class="source-link">[ <a href="javascript:toggleSource('M000263_source')" id="l_M000263_source">show source</a> ]</p>
342
+ <div id="M000263_source" class="dyn-source">
343
+ <pre>
344
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 136</span>
345
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
346
+ 137: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
347
+ 138: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
348
+ 139: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
349
+ 140: <span class="ruby-keyword kw">end</span>
350
+ </pre>
351
+ </div>
352
+ </div>
353
+ </div>
354
+ <div class="method">
355
+ <div class="title">
356
+ <a name="M000265"></a><b>readline</b>()
357
+ </div>
358
+ <div class="sourcecode">
359
+ <p class="source-link">[ <a href="javascript:toggleSource('M000265_source')" id="l_M000265_source">show source</a> ]</p>
360
+ <div id="M000265_source" class="dyn-source">
361
+ <pre>
362
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 148</span>
363
+ 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readline</span>
364
+ 149: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">readline</span>
365
+ 150: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
366
+ 151: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
367
+ 152: <span class="ruby-keyword kw">end</span>
368
+ </pre>
369
+ </div>
370
+ </div>
371
+ </div>
372
+ <div class="method">
373
+ <div class="title">
374
+ <a name="M000264"></a><b>readpartial</b>(*args)
375
+ </div>
376
+ <div class="sourcecode">
377
+ <p class="source-link">[ <a href="javascript:toggleSource('M000264_source')" id="l_M000264_source">show source</a> ]</p>
378
+ <div id="M000264_source" class="dyn-source">
379
+ <pre>
380
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 142</span>
381
+ 142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readpartial</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
382
+ 143: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">readpartial</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
383
+ 144: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
384
+ 145: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
385
+ 146: <span class="ruby-keyword kw">end</span>
386
+ </pre>
387
+ </div>
388
+ </div>
389
+ </div>
390
+ <div class="method">
391
+ <div class="title">
392
+ <a name="M000271"></a><b>source_of_exception?</b>(exception)
393
+ </div>
394
+ <div class="sourcecode">
395
+ <p class="source-link">[ <a href="javascript:toggleSource('M000271_source')" id="l_M000271_source">show source</a> ]</p>
396
+ <div id="M000271_source" class="dyn-source">
397
+ <pre>
398
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 184</span>
399
+ 184: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">source_of_exception?</span>(<span class="ruby-identifier">exception</span>)
400
+ 185: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">exception</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-value str">&quot;@from_unseekable_socket&quot;</span><span class="ruby-value str">&quot;@from_unseekable_socket&quot;</span>) <span class="ruby-operator">==</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">object_id</span>
401
+ 186: <span class="ruby-keyword kw">end</span>
402
+ </pre>
403
+ </div>
404
+ </div>
405
+ </div>
406
+ <div class="method">
407
+ <div class="title">
408
+ <a name="M000252"></a><b>sync=</b>(value)
409
+ </div>
410
+ <div class="description">
411
+ <p>
412
+ Don&#8216;t allow disabling of sync.
413
+ </p>
414
+ </div>
415
+ <div class="sourcecode">
416
+ <p class="source-link">[ <a href="javascript:toggleSource('M000252_source')" id="l_M000252_source">show source</a> ]</p>
417
+ <div id="M000252_source" class="dyn-source">
418
+ <pre>
419
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 79</span>
420
+ 79: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sync=</span>(<span class="ruby-identifier">value</span>)
421
+ 80: <span class="ruby-keyword kw">end</span>
422
+ </pre>
423
+ </div>
424
+ </div>
425
+ </div>
426
+ <div class="method">
427
+ <div class="title">
428
+ <a name="M000255"></a><b>to_io</b>()
429
+ </div>
430
+ <div class="sourcecode">
431
+ <p class="source-link">[ <a href="javascript:toggleSource('M000255_source')" id="l_M000255_source">show source</a> ]</p>
432
+ <div id="M000255_source" class="dyn-source">
433
+ <pre>
434
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 90</span>
435
+ 90: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_io</span>
436
+ 91: <span class="ruby-keyword kw">self</span>
437
+ 92: <span class="ruby-keyword kw">end</span>
438
+ </pre>
439
+ </div>
440
+ </div>
441
+ </div>
442
+ <div class="method">
443
+ <div class="title">
444
+ <a name="M000251"></a><b>wrap</b>(socket)
445
+ </div>
446
+ <div class="sourcecode">
447
+ <p class="source-link">[ <a href="javascript:toggleSource('M000251_source')" id="l_M000251_source">show source</a> ]</p>
448
+ <div id="M000251_source" class="dyn-source">
449
+ <pre>
450
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 48</span>
451
+ 48: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">wrap</span>(<span class="ruby-identifier">socket</span>)
452
+ 49: <span class="ruby-comment cmt"># Some people report that sometimes their Ruby (MRI/REE)</span>
453
+ 50: <span class="ruby-comment cmt"># processes get stuck with 100% CPU usage. Upon further</span>
454
+ 51: <span class="ruby-comment cmt"># inspection with strace, it turns out that these Ruby</span>
455
+ 52: <span class="ruby-comment cmt"># processes are continuously calling lseek() on a socket,</span>
456
+ 53: <span class="ruby-comment cmt"># which of course returns ESPIPE as error. gdb reveals</span>
457
+ 54: <span class="ruby-comment cmt"># lseek() is called by fwrite(), which in turn is called</span>
458
+ 55: <span class="ruby-comment cmt"># by rb_fwrite(). The affected socket is the</span>
459
+ 56: <span class="ruby-comment cmt"># AbstractRequestHandler client socket.</span>
460
+ 57: <span class="ruby-comment cmt">#</span>
461
+ 58: <span class="ruby-comment cmt"># I inspected the MRI source code and didn't find</span>
462
+ 59: <span class="ruby-comment cmt"># anything that would explain this behavior. This makes</span>
463
+ 60: <span class="ruby-comment cmt"># me think that it's a glibc bug, but that's very</span>
464
+ 61: <span class="ruby-comment cmt"># unlikely.</span>
465
+ 62: <span class="ruby-comment cmt">#</span>
466
+ 63: <span class="ruby-comment cmt"># The rb_fwrite() implementation takes an entirely</span>
467
+ 64: <span class="ruby-comment cmt"># different code path if I set 'sync' to true: it will</span>
468
+ 65: <span class="ruby-comment cmt"># skip fwrite() and use write() instead. So here we set</span>
469
+ 66: <span class="ruby-comment cmt"># 'sync' to true in the hope that this will work around</span>
470
+ 67: <span class="ruby-comment cmt"># the problem.</span>
471
+ 68: <span class="ruby-identifier">socket</span>.<span class="ruby-identifier">sync</span> = <span class="ruby-keyword kw">true</span>
472
+ 69:
473
+ 70: <span class="ruby-comment cmt"># There's no need to set the encoding for Ruby 1.9 because</span>
474
+ 71: <span class="ruby-comment cmt"># abstract_request_handler.rb is tagged with 'encoding: binary'.</span>
475
+ 72:
476
+ 73: <span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">socket</span>
477
+ 74:
478
+ 75: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
479
+ 76: <span class="ruby-keyword kw">end</span>
480
+ </pre>
481
+ </div>
482
+ </div>
483
+ </div>
484
+ <div class="method">
485
+ <div class="title">
486
+ <a name="M000257"></a><b>write</b>(string)
487
+ </div>
488
+ <div class="sourcecode">
489
+ <p class="source-link">[ <a href="javascript:toggleSource('M000257_source')" id="l_M000257_source">show source</a> ]</p>
490
+ <div id="M000257_source" class="dyn-source">
491
+ <pre>
492
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 100</span>
493
+ 100: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">string</span>)
494
+ 101: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">string</span>)
495
+ 102: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
496
+ 103: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
497
+ 104: <span class="ruby-keyword kw">end</span>
498
+ </pre>
499
+ </div>
500
+ </div>
501
+ </div>
502
+ <div class="method">
503
+ <div class="title">
504
+ <a name="M000258"></a><b>writev</b>(components)
505
+ </div>
506
+ <div class="sourcecode">
507
+ <p class="source-link">[ <a href="javascript:toggleSource('M000258_source')" id="l_M000258_source">show source</a> ]</p>
508
+ <div id="M000258_source" class="dyn-source">
509
+ <pre>
510
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 106</span>
511
+ 106: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">writev</span>(<span class="ruby-identifier">components</span>)
512
+ 107: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">writev</span>(<span class="ruby-identifier">components</span>)
513
+ 108: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
514
+ 109: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
515
+ 110: <span class="ruby-keyword kw">end</span>
516
+ </pre>
517
+ </div>
518
+ </div>
519
+ </div>
520
+ <div class="method">
521
+ <div class="title">
522
+ <a name="M000259"></a><b>writev2</b>(components, components2)
523
+ </div>
524
+ <div class="sourcecode">
525
+ <p class="source-link">[ <a href="javascript:toggleSource('M000259_source')" id="l_M000259_source">show source</a> ]</p>
526
+ <div id="M000259_source" class="dyn-source">
527
+ <pre>
528
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 112</span>
529
+ 112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">writev2</span>(<span class="ruby-identifier">components</span>, <span class="ruby-identifier">components2</span>)
530
+ 113: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">writev2</span>(<span class="ruby-identifier">components</span>, <span class="ruby-identifier">components2</span>)
531
+ 114: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
532
+ 115: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
533
+ 116: <span class="ruby-keyword kw">end</span>
534
+ </pre>
535
+ </div>
536
+ </div>
537
+ </div>
538
+ <div class="method">
539
+ <div class="title">
540
+ <a name="M000260"></a><b>writev3</b>(components, components2, components3)
541
+ </div>
542
+ <div class="sourcecode">
543
+ <p class="source-link">[ <a href="javascript:toggleSource('M000260_source')" id="l_M000260_source">show source</a> ]</p>
544
+ <div id="M000260_source" class="dyn-source">
545
+ <pre>
546
+ <span class="ruby-comment cmt"># File lib/phusion_passenger/utils/unseekable_socket.rb, line 118</span>
547
+ 118: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">writev3</span>(<span class="ruby-identifier">components</span>, <span class="ruby-identifier">components2</span>, <span class="ruby-identifier">components3</span>)
548
+ 119: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">writev3</span>(<span class="ruby-identifier">components</span>, <span class="ruby-identifier">components2</span>, <span class="ruby-identifier">components3</span>)
549
+ 120: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
550
+ 121: <span class="ruby-identifier">raise</span> <span class="ruby-identifier">annotate</span>(<span class="ruby-identifier">e</span>)
551
+ 122: <span class="ruby-keyword kw">end</span>
552
+ </pre>
553
+ </div>
554
+ </div>
555
+ </div>
556
+ </div>
557
+
558
+ </div>
559
+
560
+ </body>
561
+ </html>