colouringcode-passenger 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. data/NEWS +129 -0
  2. data/Rakefile +2 -2
  3. data/bin/passenger-install-apache2-module +1 -0
  4. data/bin/passenger-install-nginx-module +4 -2
  5. data/ext/apache2/Hooks.cpp +4 -2
  6. data/ext/common/ApplicationPoolServer.h +1 -1
  7. data/ext/common/ApplicationPoolServerExecutable.cpp +1 -1
  8. data/ext/common/MessageChannel.h +48 -4
  9. data/ext/common/StandardApplicationPool.h +4 -2
  10. data/ext/common/Version.h +1 -1
  11. data/ext/nginx/Configuration.c +1 -1
  12. data/ext/nginx/HttpStatusExtractor.h +1 -0
  13. data/ext/nginx/ScgiRequestParser.h +1 -0
  14. data/ext/oxt/system_calls.cpp +11 -0
  15. data/ext/oxt/system_calls.hpp +2 -1
  16. data/ext/oxt/thread.hpp +97 -1
  17. data/ext/phusion_passenger/native_support.c +30 -1
  18. data/lib/phusion_passenger/constants.rb +1 -1
  19. data/lib/phusion_passenger/dependencies.rb +32 -0
  20. data/lib/phusion_passenger/message_channel.rb +45 -3
  21. data/lib/phusion_passenger/platform_info.rb +1 -1
  22. data/lib/phusion_passenger/rack/application_spawner.rb +10 -4
  23. data/lib/phusion_passenger/rack/request_handler.rb +2 -5
  24. data/lib/phusion_passenger/railz/application_spawner.rb +59 -7
  25. data/lib/phusion_passenger/utils.rb +70 -16
  26. data/{vendor/rack-1.0.0-git/lib/rack → lib/phusion_passenger/utils}/rewindable_input.rb +34 -9
  27. data/test/ApplicationPoolTest.cpp +1 -1
  28. data/test/MessageChannelTest.cpp +9 -1
  29. data/test/stub/message_channel.rb +1 -1
  30. data/test/stub/message_channel_2.rb +1 -1
  31. data/test/stub/message_channel_3.rb +2 -2
  32. metadata +43 -155
  33. data/doc/Architectural overview.html +0 -1
  34. data/doc/rdoc/classes/ConditionVariable.html +0 -194
  35. data/doc/rdoc/classes/Exception.html +0 -120
  36. data/doc/rdoc/classes/GC.html +0 -113
  37. data/doc/rdoc/classes/IO.html +0 -169
  38. data/doc/rdoc/classes/PhusionPassenger.html +0 -238
  39. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -153
  40. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -517
  41. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -719
  42. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  43. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  44. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  45. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  46. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -598
  47. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -140
  48. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +0 -317
  49. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +0 -138
  50. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -154
  51. data/doc/rdoc/classes/PhusionPassenger/Application.html +0 -283
  52. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  53. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  54. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -181
  55. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  56. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  57. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -489
  58. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +0 -350
  59. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  60. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -188
  61. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -199
  62. data/doc/rdoc/classes/PhusionPassenger/Railz.html +0 -95
  63. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +0 -438
  64. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +0 -98
  65. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +0 -200
  66. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +0 -436
  67. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +0 -98
  68. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +0 -155
  69. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -402
  70. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  71. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -803
  72. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  73. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  74. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  75. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -188
  76. data/doc/rdoc/classes/PlatformInfo.html +0 -866
  77. data/doc/rdoc/classes/RakeExtensions.html +0 -197
  78. data/doc/rdoc/classes/Signal.html +0 -131
  79. data/doc/rdoc/created.rid +0 -1
  80. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -255
  81. data/doc/rdoc/files/README.html +0 -175
  82. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +0 -92
  83. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -129
  84. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -129
  85. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  86. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  87. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +0 -130
  88. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  89. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +0 -127
  90. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  91. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  92. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -134
  93. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +0 -122
  94. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  95. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -126
  96. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  97. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  98. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -127
  99. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -133
  100. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  101. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +0 -140
  102. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +0 -126
  103. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +0 -145
  104. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +0 -125
  105. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  106. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -159
  107. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -174
  108. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -129
  109. data/doc/rdoc/files/misc/rake/extensions_rb.html +0 -130
  110. data/doc/rdoc/fr_class_index.html +0 -91
  111. data/doc/rdoc/fr_file_index.html +0 -76
  112. data/doc/rdoc/fr_method_index.html +0 -205
  113. data/doc/rdoc/index.html +0 -26
  114. data/doc/rdoc/rdoc-style.css +0 -187
  115. data/vendor/README +0 -13
  116. data/vendor/README_FOR_PACKAGERS +0 -1
  117. data/vendor/rack-1.0.0-git/COPYING +0 -18
  118. data/vendor/rack-1.0.0-git/KNOWN-ISSUES +0 -18
  119. data/vendor/rack-1.0.0-git/README +0 -353
  120. data/vendor/rack-1.0.0-git/Rakefile +0 -164
  121. data/vendor/rack-1.0.0-git/lib/rack.rb +0 -90
  122. data/vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb +0 -22
  123. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb +0 -37
  124. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb +0 -37
  125. data/vendor/rack-1.0.0-git/lib/rack/auth/basic.rb +0 -58
  126. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb +0 -124
  127. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb +0 -51
  128. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb +0 -55
  129. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb +0 -40
  130. data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +0 -487
  131. data/vendor/rack-1.0.0-git/lib/rack/builder.rb +0 -63
  132. data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +0 -41
  133. data/vendor/rack-1.0.0-git/lib/rack/chunked.rb +0 -49
  134. data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +0 -52
  135. data/vendor/rack-1.0.0-git/lib/rack/conditionalget.rb +0 -47
  136. data/vendor/rack-1.0.0-git/lib/rack/content_length.rb +0 -29
  137. data/vendor/rack-1.0.0-git/lib/rack/content_type.rb +0 -23
  138. data/vendor/rack-1.0.0-git/lib/rack/deflater.rb +0 -96
  139. data/vendor/rack-1.0.0-git/lib/rack/directory.rb +0 -153
  140. data/vendor/rack-1.0.0-git/lib/rack/file.rb +0 -88
  141. data/vendor/rack-1.0.0-git/lib/rack/handler.rb +0 -69
  142. data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +0 -61
  143. data/vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb +0 -8
  144. data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +0 -88
  145. data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +0 -55
  146. data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +0 -84
  147. data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +0 -59
  148. data/vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb +0 -8
  149. data/vendor/rack-1.0.0-git/lib/rack/handler/thin.rb +0 -18
  150. data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +0 -67
  151. data/vendor/rack-1.0.0-git/lib/rack/head.rb +0 -19
  152. data/vendor/rack-1.0.0-git/lib/rack/lint.rb +0 -537
  153. data/vendor/rack-1.0.0-git/lib/rack/lobster.rb +0 -65
  154. data/vendor/rack-1.0.0-git/lib/rack/lock.rb +0 -16
  155. data/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb +0 -27
  156. data/vendor/rack-1.0.0-git/lib/rack/mime.rb +0 -204
  157. data/vendor/rack-1.0.0-git/lib/rack/mock.rb +0 -184
  158. data/vendor/rack-1.0.0-git/lib/rack/recursive.rb +0 -57
  159. data/vendor/rack-1.0.0-git/lib/rack/reloader.rb +0 -106
  160. data/vendor/rack-1.0.0-git/lib/rack/request.rb +0 -248
  161. data/vendor/rack-1.0.0-git/lib/rack/response.rb +0 -183
  162. data/vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb +0 -142
  163. data/vendor/rack-1.0.0-git/lib/rack/session/cookie.rb +0 -91
  164. data/vendor/rack-1.0.0-git/lib/rack/session/memcache.rb +0 -109
  165. data/vendor/rack-1.0.0-git/lib/rack/session/pool.rb +0 -100
  166. data/vendor/rack-1.0.0-git/lib/rack/showexceptions.rb +0 -349
  167. data/vendor/rack-1.0.0-git/lib/rack/showstatus.rb +0 -106
  168. data/vendor/rack-1.0.0-git/lib/rack/static.rb +0 -38
  169. data/vendor/rack-1.0.0-git/lib/rack/urlmap.rb +0 -55
  170. data/vendor/rack-1.0.0-git/lib/rack/utils.rb +0 -522
@@ -1,6 +1,10 @@
1
+ # Modified version of Rack::RewindableInput with Ruby 1.9 fix.
2
+
1
3
  require 'tempfile'
2
4
 
3
- module Rack
5
+ module PhusionPassenger
6
+ module Utils
7
+
4
8
  # Class which can make any IO object rewindable, including non-rewindable ones. It does
5
9
  # this by buffering the data into a tempfile, which is rewindable.
6
10
  #
@@ -37,6 +41,11 @@ module Rack
37
41
  @rewindable_io.rewind
38
42
  end
39
43
 
44
+ def size
45
+ make_rewindable unless @rewindable_io
46
+ @rewindable_io.size
47
+ end
48
+
40
49
  # Closes this RewindableInput object without closing the originally
41
50
  # wrapped IO oject. Cleans up any temporary resources that this RewindableInput
42
51
  # has created.
@@ -55,12 +64,16 @@ module Rack
55
64
 
56
65
  private
57
66
 
58
- # Ruby's Tempfile class has a bug. Subclass it and fix it.
59
- class Tempfile < ::Tempfile
60
- def _close
61
- @tmpfile.close if @tmpfile
62
- @data[1] = nil if @data
63
- @tmpfile = nil
67
+ if RUBY_VERSION < '1.9.0'
68
+ # Many Ruby 1.8's tempfile libraries have a bug that can cause
69
+ # the #close method to raise an exception. Subclass it and fix
70
+ # it.
71
+ class Tempfile < ::Tempfile
72
+ def _close
73
+ @tmpfile.close if @tmpfile
74
+ @data[1] = nil if @data
75
+ @tmpfile = nil
76
+ end
64
77
  end
65
78
  end
66
79
 
@@ -74,7 +87,7 @@ module Rack
74
87
  @rewindable_io.chmod(0000)
75
88
  @rewindable_io.set_encoding(Encoding::BINARY) if @rewindable_io.respond_to?(:set_encoding)
76
89
  @rewindable_io.binmode
77
- if filesystem_has_posix_semantics?
90
+ if filesystem_has_posix_semantics? && !tempfile_unlink_contains_bug?
78
91
  @rewindable_io.unlink
79
92
  @unlinked = true
80
93
  end
@@ -96,5 +109,17 @@ module Rack
96
109
  def filesystem_has_posix_semantics?
97
110
  RUBY_PLATFORM !~ /(mswin|mingw|cygwin|java)/
98
111
  end
112
+
113
+ def tempfile_unlink_contains_bug?
114
+ # The tempfile library as included in Ruby 1.9.1-p152 and later
115
+ # contains a bug: unlinking an open Tempfile object also closes
116
+ # it, which breaks our expected POSIX semantics. This problem
117
+ # has been fixed in Ruby 1.9.2, but the Ruby team chose not to
118
+ # include the bug fix in later versions of the 1.9.1 series.
119
+ ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
120
+ ruby_engine == "ruby" && RUBY_VERSION == "1.9.1" && RUBY_PATCHLEVEL >= 152
121
+ end
99
122
  end
100
- end
123
+
124
+ end # module Utils
125
+ end # module PhusionPassenger
@@ -182,7 +182,7 @@
182
182
  Application::SessionPtr session3;
183
183
  bool done;
184
184
 
185
- shared_ptr<thread> thr = ptr(new thread(PoolWaitTestThread(pool2, session3, done)));
185
+ shared_ptr<boost::thread> thr = ptr(new boost::thread(PoolWaitTestThread(pool2, session3, done)));
186
186
  usleep(500000);
187
187
  ensure("ApplicationPool is still waiting", !done);
188
188
  ensure_equals(pool->getActive(), 2u);
@@ -1,6 +1,8 @@
1
1
  #include "tut.h"
2
2
  #include "MessageChannel.h"
3
3
 
4
+ #include <boost/bind.hpp>
5
+ #include <boost/thread.hpp>
4
6
  #include <cstring>
5
7
  #include <cstdio>
6
8
 
@@ -144,8 +146,14 @@ namespace tut {
144
146
  MessageChannel channel2(s[1]);
145
147
 
146
148
  pipe(my_pipe);
147
- channel1.writeFileDescriptor(my_pipe[1]);
149
+ boost::thread thr(boost::bind(
150
+ &MessageChannel::writeFileDescriptor,
151
+ &channel1,
152
+ my_pipe[1],
153
+ true
154
+ ));
148
155
  fd = channel2.readFileDescriptor();
156
+ thr.join();
149
157
 
150
158
  char buf[5];
151
159
  write(fd, "hello", 5);
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib"
2
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../../lib")
3
3
  require 'phusion_passenger/message_channel'
4
4
 
5
5
  include PhusionPassenger
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib"
2
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../../lib")
3
3
  require 'phusion_passenger/message_channel'
4
4
 
5
5
  include PhusionPassenger
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib"
3
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../ext"
2
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../../lib")
3
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../../ext")
4
4
  require 'phusion_passenger/message_channel'
5
5
  require 'phusion_passenger/utils'
6
6
 
metadata CHANGED
@@ -1,7 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colouringcode-passenger
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ version: "0.2"
5
9
  platform: ruby
6
10
  authors:
7
11
  - Colouring Code - http://www.colouringcode.com/
@@ -9,29 +13,49 @@ autorequire:
9
13
  bindir: bin
10
14
  cert_chain: []
11
15
 
12
- date: 2009-12-03 00:00:00 +00:00
16
+ date: 2010-04-26 00:00:00 +01:00
13
17
  default_executable:
14
18
  dependencies:
15
19
  - !ruby/object:Gem::Dependency
16
20
  name: rake
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
20
23
  requirements:
21
24
  - - ">="
22
25
  - !ruby/object:Gem::Version
26
+ segments:
27
+ - 0
28
+ - 8
29
+ - 1
23
30
  version: 0.8.1
24
- version:
31
+ type: :runtime
32
+ version_requirements: *id001
25
33
  - !ruby/object:Gem::Dependency
26
34
  name: fastthread
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
30
37
  requirements:
31
38
  - - ">="
32
39
  - !ruby/object:Gem::Version
40
+ segments:
41
+ - 1
42
+ - 0
43
+ - 1
33
44
  version: 1.0.1
34
- version:
45
+ type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: rack
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :runtime
58
+ version_requirements: *id003
35
59
  description: Passenger is an Apache module for Ruby on Rails support, custom error template support
36
60
  email: techystuff@colouringcode.com
37
61
  executables:
@@ -78,6 +102,7 @@ files:
78
102
  - lib/phusion_passenger/railz/request_handler.rb
79
103
  - lib/phusion_passenger/simple_benchmarking.rb
80
104
  - lib/phusion_passenger/spawn_manager.rb
105
+ - lib/phusion_passenger/utils/rewindable_input.rb
81
106
  - lib/phusion_passenger/utils.rb
82
107
  - lib/phusion_passenger/wsgi/application_spawner.rb
83
108
  - lib/phusion_passenger/wsgi/request_handler.py
@@ -120,16 +145,15 @@ files:
120
145
  - bin/passenger-status
121
146
  - bin/passenger-stress-test
122
147
  - doc/ApplicationPool algorithm.txt
123
- - doc/Architectural overview.html
124
148
  - doc/Architectural overview.txt
125
149
  - doc/definitions.h
126
150
  - doc/Doxyfile
127
- - doc/Security of user switching support.html
128
151
  - doc/Security of user switching support.txt
129
- - doc/Users guide Apache.html
130
152
  - doc/Users guide Apache.txt
131
- - doc/Users guide Nginx.html
132
153
  - doc/Users guide Nginx.txt
154
+ - doc/Users guide Apache.html
155
+ - doc/Users guide Nginx.html
156
+ - doc/Security of user switching support.html
133
157
  - doc/images/by_sa.png
134
158
  - doc/images/conservative_spawning.png
135
159
  - doc/images/conservative_spawning.svg
@@ -142,12 +166,6 @@ files:
142
166
  - doc/images/spawn_server_architecture.svg
143
167
  - doc/images/typical_isolated_web_application.png
144
168
  - doc/images/typical_isolated_web_application.svg
145
- - doc/rdoc/created.rid
146
- - doc/rdoc/fr_class_index.html
147
- - doc/rdoc/fr_file_index.html
148
- - doc/rdoc/fr_method_index.html
149
- - doc/rdoc/index.html
150
- - doc/rdoc/rdoc-style.css
151
169
  - doc/template/horo.rb
152
170
  - doc/users_guide_snippets/analysis_and_system_maintenance_tools.txt
153
171
  - doc/users_guide_snippets/appendix_a_about.txt
@@ -168,16 +186,6 @@ files:
168
186
  - doc/images/icons/tip.png
169
187
  - doc/images/icons/up.png
170
188
  - doc/images/icons/warning.png
171
- - doc/rdoc/classes/ConditionVariable.html
172
- - doc/rdoc/classes/Exception.html
173
- - doc/rdoc/classes/GC.html
174
- - doc/rdoc/classes/IO.html
175
- - doc/rdoc/classes/PhusionPassenger.html
176
- - doc/rdoc/classes/PlatformInfo.html
177
- - doc/rdoc/classes/RakeExtensions.html
178
- - doc/rdoc/classes/Signal.html
179
- - doc/rdoc/files/DEVELOPERS_TXT.html
180
- - doc/rdoc/files/README.html
181
189
  - doc/images/icons/callouts/1.png
182
190
  - doc/images/icons/callouts/10.png
183
191
  - doc/images/icons/callouts/11.png
@@ -193,71 +201,6 @@ files:
193
201
  - doc/images/icons/callouts/7.png
194
202
  - doc/images/icons/callouts/8.png
195
203
  - doc/images/icons/callouts/9.png
196
- - doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html
197
- - doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html
198
- - doc/rdoc/classes/PhusionPassenger/AbstractServer.html
199
- - doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html
200
- - doc/rdoc/classes/PhusionPassenger/AdminTools.html
201
- - doc/rdoc/classes/PhusionPassenger/AppInitError.html
202
- - doc/rdoc/classes/PhusionPassenger/Application.html
203
- - doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html
204
- - doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html
205
- - doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html
206
- - doc/rdoc/classes/PhusionPassenger/InitializationError.html
207
- - doc/rdoc/classes/PhusionPassenger/InvalidPath.html
208
- - doc/rdoc/classes/PhusionPassenger/MessageChannel.html
209
- - doc/rdoc/classes/PhusionPassenger/NativeSupport.html
210
- - doc/rdoc/classes/PhusionPassenger/Rack.html
211
- - doc/rdoc/classes/PhusionPassenger/Railz.html
212
- - doc/rdoc/classes/PhusionPassenger/SpawnManager.html
213
- - doc/rdoc/classes/PhusionPassenger/UnknownError.html
214
- - doc/rdoc/classes/PhusionPassenger/Utils.html
215
- - doc/rdoc/classes/PhusionPassenger/VersionNotFound.html
216
- - doc/rdoc/classes/PhusionPassenger/WSGI.html
217
- - doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html
218
- - doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html
219
- - doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html
220
- - doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html
221
- - doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html
222
- - doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html
223
- - doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html
224
- - doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html
225
- - doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html
226
- - doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html
227
- - doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html
228
- - doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html
229
- - doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html
230
- - doc/rdoc/files/ext/phusion_passenger/native_support_c.html
231
- - doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html
232
- - doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html
233
- - doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html
234
- - doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html
235
- - doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html
236
- - doc/rdoc/files/lib/phusion_passenger/application_rb.html
237
- - doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html
238
- - doc/rdoc/files/lib/phusion_passenger/constants_rb.html
239
- - doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html
240
- - doc/rdoc/files/lib/phusion_passenger/events_rb.html
241
- - doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html
242
- - doc/rdoc/files/lib/phusion_passenger/html_template_rb.html
243
- - doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html
244
- - doc/rdoc/files/lib/phusion_passenger/packaging_rb.html
245
- - doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html
246
- - doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html
247
- - doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html
248
- - doc/rdoc/files/lib/phusion_passenger/utils_rb.html
249
- - doc/rdoc/files/misc/rake/extensions_rb.html
250
- - doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html
251
- - doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html
252
- - doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html
253
- - doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html
254
- - doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html
255
- - doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html
256
- - doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html
257
- - doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html
258
- - doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html
259
- - doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html
260
- - doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html
261
204
  - man/passenger-config.1
262
205
  - man/passenger-make-enterprisey.8
263
206
  - man/passenger-memory-stats.8
@@ -908,63 +851,6 @@ files:
908
851
  - misc/rake/gempackagetask.rb
909
852
  - misc/rake/packagetask.rb
910
853
  - misc/rake/rdoctask.rb
911
- - vendor/rack-1.0.0-git/COPYING
912
- - vendor/rack-1.0.0-git/KNOWN-ISSUES
913
- - vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb
914
- - vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb
915
- - vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb
916
- - vendor/rack-1.0.0-git/lib/rack/auth/basic.rb
917
- - vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb
918
- - vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb
919
- - vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb
920
- - vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb
921
- - vendor/rack-1.0.0-git/lib/rack/auth/openid.rb
922
- - vendor/rack-1.0.0-git/lib/rack/builder.rb
923
- - vendor/rack-1.0.0-git/lib/rack/cascade.rb
924
- - vendor/rack-1.0.0-git/lib/rack/chunked.rb
925
- - vendor/rack-1.0.0-git/lib/rack/commonlogger.rb
926
- - vendor/rack-1.0.0-git/lib/rack/conditionalget.rb
927
- - vendor/rack-1.0.0-git/lib/rack/content_length.rb
928
- - vendor/rack-1.0.0-git/lib/rack/content_type.rb
929
- - vendor/rack-1.0.0-git/lib/rack/deflater.rb
930
- - vendor/rack-1.0.0-git/lib/rack/directory.rb
931
- - vendor/rack-1.0.0-git/lib/rack/file.rb
932
- - vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb
933
- - vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb
934
- - vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb
935
- - vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb
936
- - vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb
937
- - vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb
938
- - vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb
939
- - vendor/rack-1.0.0-git/lib/rack/handler/thin.rb
940
- - vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb
941
- - vendor/rack-1.0.0-git/lib/rack/handler.rb
942
- - vendor/rack-1.0.0-git/lib/rack/head.rb
943
- - vendor/rack-1.0.0-git/lib/rack/lint.rb
944
- - vendor/rack-1.0.0-git/lib/rack/lobster.rb
945
- - vendor/rack-1.0.0-git/lib/rack/lock.rb
946
- - vendor/rack-1.0.0-git/lib/rack/methodoverride.rb
947
- - vendor/rack-1.0.0-git/lib/rack/mime.rb
948
- - vendor/rack-1.0.0-git/lib/rack/mock.rb
949
- - vendor/rack-1.0.0-git/lib/rack/recursive.rb
950
- - vendor/rack-1.0.0-git/lib/rack/reloader.rb
951
- - vendor/rack-1.0.0-git/lib/rack/request.rb
952
- - vendor/rack-1.0.0-git/lib/rack/response.rb
953
- - vendor/rack-1.0.0-git/lib/rack/rewindable_input.rb
954
- - vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb
955
- - vendor/rack-1.0.0-git/lib/rack/session/cookie.rb
956
- - vendor/rack-1.0.0-git/lib/rack/session/memcache.rb
957
- - vendor/rack-1.0.0-git/lib/rack/session/pool.rb
958
- - vendor/rack-1.0.0-git/lib/rack/showexceptions.rb
959
- - vendor/rack-1.0.0-git/lib/rack/showstatus.rb
960
- - vendor/rack-1.0.0-git/lib/rack/static.rb
961
- - vendor/rack-1.0.0-git/lib/rack/urlmap.rb
962
- - vendor/rack-1.0.0-git/lib/rack/utils.rb
963
- - vendor/rack-1.0.0-git/lib/rack.rb
964
- - vendor/rack-1.0.0-git/Rakefile
965
- - vendor/rack-1.0.0-git/README
966
- - vendor/README
967
- - vendor/README_FOR_PACKAGERS
968
854
  - test/ApplicationPoolServer_ApplicationPoolTest.cpp
969
855
  - test/ApplicationPoolServerTest.cpp
970
856
  - test/ApplicationPoolTest.cpp
@@ -1132,19 +1018,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
1132
1018
  requirements:
1133
1019
  - - ">="
1134
1020
  - !ruby/object:Gem::Version
1021
+ segments:
1022
+ - 0
1135
1023
  version: "0"
1136
- version:
1137
1024
  required_rubygems_version: !ruby/object:Gem::Requirement
1138
1025
  requirements:
1139
1026
  - - ">="
1140
1027
  - !ruby/object:Gem::Version
1028
+ segments:
1029
+ - 0
1141
1030
  version: "0"
1142
- version:
1143
1031
  requirements:
1144
1032
  - fastthread
1145
1033
  - Apache 2 with development headers
1146
1034
  rubyforge_project: colouringcode-passenger
1147
- rubygems_version: 1.3.5
1035
+ rubygems_version: 1.3.6
1148
1036
  signing_key:
1149
1037
  specification_version: 3
1150
1038
  summary: Apache module for Ruby on Rails support, custom template support
@@ -1 +0,0 @@
1
- asciidoc required to build docs
@@ -1,194 +0,0 @@
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: ConditionVariable</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 />ConditionVariable</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_rb.html">lib/phusion_passenger/utils.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
-
79
-
80
-
81
- <div class="sectiontitle">Methods</div>
82
- <ul>
83
- <li><a href="#M000003">timed_wait</a></li>
84
- <li><a href="#M000004">timed_wait!</a></li>
85
- </ul>
86
-
87
-
88
-
89
-
90
-
91
-
92
- <div class="sectiontitle">Public Instance methods</div>
93
- <div class="method">
94
- <div class="title">
95
- <a name="M000003"></a><b>timed_wait</b>(mutex, secs)
96
- </div>
97
- <div class="description">
98
- <p>
99
- This is like ConditionVariable.wait(), but allows one to wait a maximum
100
- amount of time. Returns true if this condition was signaled, false if a
101
- timeout occurred.
102
- </p>
103
- </div>
104
- <div class="sourcecode">
105
- <p class="source-link">[ <a href="javascript:toggleSource('M000003_source')" id="l_M000003_source">show source</a> ]</p>
106
- <div id="M000003_source" class="dyn-source">
107
- <pre>
108
- <span class="ruby-comment cmt"># File lib/phusion_passenger/utils.rb, line 465</span>
109
- 465: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">timed_wait</span>(<span class="ruby-identifier">mutex</span>, <span class="ruby-identifier">secs</span>)
110
- 466: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">secs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">100000000</span>
111
- 467: <span class="ruby-comment cmt"># NOTE: If one calls timeout() on FreeBSD 5 with an</span>
112
- 468: <span class="ruby-comment cmt"># argument of more than 100000000, then MRI will become</span>
113
- 469: <span class="ruby-comment cmt"># stuck in an infite loop, blocking all threads. It seems</span>
114
- 470: <span class="ruby-comment cmt"># that MRI uses select() to implement sleeping.</span>
115
- 471: <span class="ruby-comment cmt"># I think that a value of more than 100000000 overflows</span>
116
- 472: <span class="ruby-comment cmt"># select()'s data structures, causing it to behave incorrectly.</span>
117
- 473: <span class="ruby-comment cmt"># So we just make sure we can't sleep more than 100000000</span>
118
- 474: <span class="ruby-comment cmt"># seconds.</span>
119
- 475: <span class="ruby-identifier">secs</span> = <span class="ruby-value">100000000</span>
120
- 476: <span class="ruby-keyword kw">end</span>
121
- 477: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">RUBY_ENGINE</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RUBY_ENGINE</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;jruby&quot;</span>
122
- 478: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">secs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
123
- 479: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>, <span class="ruby-identifier">secs</span>)
124
- 480: <span class="ruby-keyword kw">else</span>
125
- 481: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>)
126
- 482: <span class="ruby-keyword kw">end</span>
127
- 483: <span class="ruby-keyword kw">else</span>
128
- 484: <span class="ruby-identifier">require</span> <span class="ruby-value str">'timeout'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">Timeout</span>)
129
- 485: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">secs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
130
- 486: <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-identifier">secs</span>) <span class="ruby-keyword kw">do</span>
131
- 487: <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>)
132
- 488: <span class="ruby-keyword kw">end</span>
133
- 489: <span class="ruby-keyword kw">else</span>
134
- 490: <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>)
135
- 491: <span class="ruby-keyword kw">end</span>
136
- 492: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
137
- 493: <span class="ruby-keyword kw">end</span>
138
- 494: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>
139
- 495: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
140
- 496: <span class="ruby-keyword kw">end</span>
141
- </pre>
142
- </div>
143
- </div>
144
- </div>
145
- <div class="method">
146
- <div class="title">
147
- <a name="M000004"></a><b>timed_wait!</b>(mutex, secs)
148
- </div>
149
- <div class="description">
150
- <p>
151
- This is like ConditionVariable.wait(), but allows one to wait a maximum
152
- amount of time. Raises Timeout::Error if the timeout has elapsed.
153
- </p>
154
- </div>
155
- <div class="sourcecode">
156
- <p class="source-link">[ <a href="javascript:toggleSource('M000004_source')" id="l_M000004_source">show source</a> ]</p>
157
- <div id="M000004_source" class="dyn-source">
158
- <pre>
159
- <span class="ruby-comment cmt"># File lib/phusion_passenger/utils.rb, line 500</span>
160
- 500: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">timed_wait!</span>(<span class="ruby-identifier">mutex</span>, <span class="ruby-identifier">secs</span>)
161
- 501: <span class="ruby-identifier">require</span> <span class="ruby-value str">'timeout'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">Timeout</span>)
162
- 502: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">secs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">100000000</span>
163
- 503: <span class="ruby-comment cmt"># See the corresponding note for timed_wait().</span>
164
- 504: <span class="ruby-identifier">secs</span> = <span class="ruby-value">100000000</span>
165
- 505: <span class="ruby-keyword kw">end</span>
166
- 506: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">defined?</span>(<span class="ruby-constant">RUBY_ENGINE</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RUBY_ENGINE</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;jruby&quot;</span>
167
- 507: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">secs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
168
- 508: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>, <span class="ruby-identifier">secs</span>)
169
- 509: <span class="ruby-identifier">raise</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>, <span class="ruby-value str">&quot;Timeout&quot;</span>
170
- 510: <span class="ruby-keyword kw">end</span>
171
- 511: <span class="ruby-keyword kw">else</span>
172
- 512: <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>)
173
- 513: <span class="ruby-keyword kw">end</span>
174
- 514: <span class="ruby-keyword kw">else</span>
175
- 515: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">secs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
176
- 516: <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-identifier">secs</span>) <span class="ruby-keyword kw">do</span>
177
- 517: <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>)
178
- 518: <span class="ruby-keyword kw">end</span>
179
- 519: <span class="ruby-keyword kw">else</span>
180
- 520: <span class="ruby-identifier">wait</span>(<span class="ruby-identifier">mutex</span>)
181
- 521: <span class="ruby-keyword kw">end</span>
182
- 522: <span class="ruby-keyword kw">end</span>
183
- 523: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
184
- 524: <span class="ruby-keyword kw">end</span>
185
- </pre>
186
- </div>
187
- </div>
188
- </div>
189
- </div>
190
-
191
- </div>
192
-
193
- </body>
194
- </html>