unicorn 4.9.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +5 -5
  2. data/.gitattributes +5 -0
  3. data/.manifest +14 -15
  4. data/.olddoc.yml +16 -6
  5. data/Application_Timeouts +7 -7
  6. data/CONTRIBUTORS +6 -2
  7. data/DESIGN +2 -4
  8. data/Documentation/.gitignore +1 -3
  9. data/Documentation/unicorn.1 +222 -0
  10. data/Documentation/unicorn_rails.1 +207 -0
  11. data/FAQ +17 -8
  12. data/GIT-VERSION-FILE +1 -1
  13. data/GIT-VERSION-GEN +1 -1
  14. data/GNUmakefile +121 -56
  15. data/HACKING +2 -10
  16. data/ISSUES +40 -43
  17. data/KNOWN_ISSUES +11 -11
  18. data/LATEST +16 -22
  19. data/LICENSE +2 -2
  20. data/Links +24 -25
  21. data/NEWS +771 -0
  22. data/PHILOSOPHY +0 -6
  23. data/README +46 -40
  24. data/SIGNALS +2 -2
  25. data/Sandbox +11 -10
  26. data/TODO +0 -2
  27. data/TUNING +30 -9
  28. data/archive/slrnpull.conf +1 -1
  29. data/bin/unicorn +4 -2
  30. data/bin/unicorn_rails +3 -3
  31. data/examples/big_app_gc.rb +1 -1
  32. data/examples/init.sh +36 -8
  33. data/examples/logrotate.conf +17 -2
  34. data/examples/nginx.conf +14 -14
  35. data/examples/unicorn.conf.minimal.rb +2 -2
  36. data/examples/unicorn.conf.rb +3 -6
  37. data/examples/unicorn.socket +11 -0
  38. data/examples/unicorn@.service +40 -0
  39. data/ext/unicorn_http/c_util.h +5 -13
  40. data/ext/unicorn_http/common_field_optimization.h +22 -5
  41. data/ext/unicorn_http/epollexclusive.h +124 -0
  42. data/ext/unicorn_http/ext_help.h +0 -44
  43. data/ext/unicorn_http/extconf.rb +32 -5
  44. data/ext/unicorn_http/global_variables.h +2 -2
  45. data/ext/unicorn_http/httpdate.c +3 -2
  46. data/ext/unicorn_http/unicorn_http.c +926 -638
  47. data/ext/unicorn_http/unicorn_http.rl +159 -170
  48. data/ext/unicorn_http/unicorn_http_common.rl +1 -1
  49. data/lib/unicorn/configurator.rb +110 -44
  50. data/lib/unicorn/const.rb +2 -25
  51. data/lib/unicorn/http_request.rb +110 -31
  52. data/lib/unicorn/http_response.rb +17 -31
  53. data/lib/unicorn/http_server.rb +255 -179
  54. data/lib/unicorn/launcher.rb +1 -1
  55. data/lib/unicorn/oob_gc.rb +6 -6
  56. data/lib/unicorn/select_waiter.rb +6 -0
  57. data/lib/unicorn/socket_helper.rb +58 -78
  58. data/lib/unicorn/stream_input.rb +8 -7
  59. data/lib/unicorn/tee_input.rb +8 -10
  60. data/lib/unicorn/tmpio.rb +8 -7
  61. data/lib/unicorn/util.rb +5 -4
  62. data/lib/unicorn/version.rb +1 -1
  63. data/lib/unicorn/worker.rb +36 -23
  64. data/lib/unicorn.rb +64 -46
  65. data/man/man1/unicorn.1 +123 -119
  66. data/man/man1/unicorn_rails.1 +106 -107
  67. data/t/GNUmakefile +3 -72
  68. data/t/README +4 -4
  69. data/t/t0011-active-unix-socket.sh +1 -1
  70. data/t/t0012-reload-empty-config.sh +2 -1
  71. data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
  72. data/t/t0301.ru +13 -0
  73. data/t/test-lib.sh +4 -3
  74. data/test/benchmark/README +14 -4
  75. data/test/benchmark/ddstream.ru +50 -0
  76. data/test/benchmark/readinput.ru +40 -0
  77. data/test/benchmark/uconnect.perl +66 -0
  78. data/test/exec/test_exec.rb +73 -19
  79. data/test/test_helper.rb +40 -31
  80. data/test/unit/test_ccc.rb +91 -0
  81. data/test/unit/test_droplet.rb +1 -1
  82. data/test/unit/test_http_parser.rb +46 -16
  83. data/test/unit/test_http_parser_ng.rb +97 -114
  84. data/test/unit/test_request.rb +10 -10
  85. data/test/unit/test_response.rb +28 -16
  86. data/test/unit/test_server.rb +86 -12
  87. data/test/unit/test_signals.rb +8 -8
  88. data/test/unit/test_socket_helper.rb +14 -10
  89. data/test/unit/test_upload.rb +9 -14
  90. data/test/unit/test_util.rb +31 -5
  91. data/test/unit/test_waiter.rb +34 -0
  92. data/unicorn.gemspec +27 -19
  93. metadata +28 -45
  94. data/Documentation/GNUmakefile +0 -30
  95. data/Documentation/unicorn.1.txt +0 -185
  96. data/Documentation/unicorn_rails.1.txt +0 -175
  97. data/examples/git.ru +0 -13
  98. data/lib/unicorn/app/exec_cgi.rb +0 -154
  99. data/lib/unicorn/app/inetd.rb +0 -109
  100. data/lib/unicorn/ssl_client.rb +0 -11
  101. data/lib/unicorn/ssl_configurator.rb +0 -104
  102. data/lib/unicorn/ssl_server.rb +0 -42
  103. data/t/hijack.ru +0 -42
  104. data/t/t0016-trust-x-forwarded-false.sh +0 -30
  105. data/t/t0017-trust-x-forwarded-true.sh +0 -30
  106. data/t/t0200-rack-hijack.sh +0 -27
  107. data/test/unit/test_http_parser_xftrust.rb +0 -38
  108. data/test/unit/test_sni_hostnames.rb +0 -47
@@ -57,8 +57,8 @@ class TestSocketHelper < Test::Unit::TestCase
57
57
  assert File.readable?(@unix_listener_path), "not readable"
58
58
  assert File.writable?(@unix_listener_path), "not writable"
59
59
  assert_equal 0777, File.umask
60
- ensure
61
- File.umask(old_umask)
60
+ ensure
61
+ File.umask(old_umask)
62
62
  end
63
63
 
64
64
  def test_bind_listen_unix_umask
@@ -71,8 +71,8 @@ class TestSocketHelper < Test::Unit::TestCase
71
71
  assert_equal @unix_listener_path, sock_name(@unix_listener)
72
72
  assert_equal 0140700, File.stat(@unix_listener_path).mode
73
73
  assert_equal 0777, File.umask
74
- ensure
75
- File.umask(old_umask)
74
+ ensure
75
+ File.umask(old_umask)
76
76
  end
77
77
 
78
78
  def test_bind_listen_unix_idempotent
@@ -116,7 +116,7 @@ class TestSocketHelper < Test::Unit::TestCase
116
116
  client.syswrite('abcde')
117
117
  exit 0
118
118
  end
119
- s = UNIXSocket.new(@unix_listener_path)
119
+ s = unix_socket(@unix_listener_path)
120
120
  IO.select([s])
121
121
  assert_equal 'abcde', s.sysread(5)
122
122
  pid, status = Process.waitpid2(pid)
@@ -150,28 +150,31 @@ class TestSocketHelper < Test::Unit::TestCase
150
150
  end
151
151
 
152
152
  def test_tcp_defer_accept_default
153
+ return unless defined?(TCP_DEFER_ACCEPT)
153
154
  port = unused_port @test_addr
154
155
  name = "#@test_addr:#{port}"
155
156
  sock = bind_listen(name)
156
157
  cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
157
158
  assert cur >= 1
158
- end if defined?(TCP_DEFER_ACCEPT)
159
+ end
159
160
 
160
161
  def test_tcp_defer_accept_disable
162
+ return unless defined?(TCP_DEFER_ACCEPT)
161
163
  port = unused_port @test_addr
162
164
  name = "#@test_addr:#{port}"
163
165
  sock = bind_listen(name, :tcp_defer_accept => false)
164
166
  cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
165
167
  assert_equal 0, cur
166
- end if defined?(TCP_DEFER_ACCEPT)
168
+ end
167
169
 
168
170
  def test_tcp_defer_accept_nr
171
+ return unless defined?(TCP_DEFER_ACCEPT)
169
172
  port = unused_port @test_addr
170
173
  name = "#@test_addr:#{port}"
171
174
  sock = bind_listen(name, :tcp_defer_accept => 60)
172
175
  cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
173
176
  assert cur > 1
174
- end if defined?(TCP_DEFER_ACCEPT)
177
+ end
175
178
 
176
179
  def test_ipv6only
177
180
  port = begin
@@ -186,12 +189,13 @@ class TestSocketHelper < Test::Unit::TestCase
186
189
  end
187
190
 
188
191
  def test_reuseport
192
+ return unless defined?(Socket::SO_REUSEPORT)
189
193
  port = unused_port @test_addr
190
194
  name = "#@test_addr:#{port}"
191
195
  sock = bind_listen(name, :reuseport => true)
192
- cur = sock.getsockopt(Socket::SOL_SOCKET, SO_REUSEPORT).unpack('i')[0]
196
+ cur = sock.getsockopt(:SOL_SOCKET, :SO_REUSEPORT).int
193
197
  assert_operator cur, :>, 0
194
198
  rescue Errno::ENOPROTOOPT
195
199
  # kernel does not support SO_REUSEPORT (older Linux)
196
- end if defined?(Socket::SO_REUSEPORT)
200
+ end
197
201
  end
@@ -60,7 +60,7 @@ class UploadTest < Test::Unit::TestCase
60
60
 
61
61
  def test_put
62
62
  start_server(@sha1_app)
63
- sock = TCPSocket.new(@addr, @port)
63
+ sock = tcp_socket(@addr, @port)
64
64
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
65
65
  @count.times do |i|
66
66
  buf = @random.sysread(@bs)
@@ -77,7 +77,7 @@ class UploadTest < Test::Unit::TestCase
77
77
  def test_put_content_md5
78
78
  md5 = Digest::MD5.new
79
79
  start_server(@sha1_app)
80
- sock = TCPSocket.new(@addr, @port)
80
+ sock = tcp_socket(@addr, @port)
81
81
  sock.syswrite("PUT / HTTP/1.0\r\nTransfer-Encoding: chunked\r\n" \
82
82
  "Trailer: Content-MD5\r\n\r\n")
83
83
  @count.times do |i|
@@ -103,7 +103,7 @@ class UploadTest < Test::Unit::TestCase
103
103
  @count, @bs = 2, 128
104
104
  start_server(@sha1_app)
105
105
  assert_equal 256, length
106
- sock = TCPSocket.new(@addr, @port)
106
+ sock = tcp_socket(@addr, @port)
107
107
  hdr = "PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n"
108
108
  @count.times do
109
109
  buf = @random.sysread(@bs)
@@ -122,7 +122,7 @@ class UploadTest < Test::Unit::TestCase
122
122
 
123
123
  def test_put_keepalive_truncates_small_overwrite
124
124
  start_server(@sha1_app)
125
- sock = TCPSocket.new(@addr, @port)
125
+ sock = tcp_socket(@addr, @port)
126
126
  to_upload = length + 1
127
127
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{to_upload}\r\n\r\n")
128
128
  @count.times do
@@ -155,7 +155,7 @@ class UploadTest < Test::Unit::TestCase
155
155
  tmp.write(nr.to_s)
156
156
  [ 200, @hdr, [] ]
157
157
  })
158
- sock = TCPSocket.new(@addr, @port)
158
+ sock = tcp_socket(@addr, @port)
159
159
  buf = ' ' * @bs
160
160
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
161
161
 
@@ -236,15 +236,10 @@ class UploadTest < Test::Unit::TestCase
236
236
  resp = Tempfile.new('resp')
237
237
  resp.sync = true
238
238
 
239
- rd, wr = IO.pipe
240
- wr.sync = rd.sync = true
241
- pid = fork {
242
- STDIN.reopen(rd)
243
- rd.close
244
- wr.close
245
- STDOUT.reopen(resp)
246
- exec cmd
247
- }
239
+ rd, wr = IO.pipe.each do |io|
240
+ io.sync = io.close_on_exec = true
241
+ end
242
+ pid = spawn(*cmd, { 0 => rd, 1 => resp })
248
243
  rd.close
249
244
 
250
245
  tmp.rewind
@@ -51,7 +51,7 @@ class TestUtil < Test::Unit::TestCase
51
51
  def test_reopen_logs_renamed_with_encoding
52
52
  tmp = Tempfile.new('')
53
53
  tmp_path = tmp.path.dup.freeze
54
- Encoding.list.each { |encoding|
54
+ Encoding.list.sample(5).each { |encoding|
55
55
  File.open(tmp_path, "a:#{encoding.to_s}") { |fp|
56
56
  fp.sync = true
57
57
  assert_equal encoding, fp.external_encoding
@@ -69,13 +69,14 @@ class TestUtil < Test::Unit::TestCase
69
69
  }
70
70
  }
71
71
  tmp.close!
72
- end if STDIN.respond_to?(:external_encoding)
72
+ end
73
73
 
74
74
  def test_reopen_logs_renamed_with_internal_encoding
75
75
  tmp = Tempfile.new('')
76
76
  tmp_path = tmp.path.dup.freeze
77
- Encoding.list.each { |ext|
78
- Encoding.list.each { |int|
77
+ full = Encoding.list
78
+ full.sample(2).each { |ext|
79
+ full.sample(2).each { |int|
79
80
  next if ext == int
80
81
  File.open(tmp_path, "a:#{ext.to_s}:#{int.to_s}") { |fp|
81
82
  fp.sync = true
@@ -101,5 +102,30 @@ class TestUtil < Test::Unit::TestCase
101
102
  }
102
103
  }
103
104
  tmp.close!
104
- end if STDIN.respond_to?(:external_encoding)
105
+ end
106
+
107
+ def test_pipe
108
+ r, w = Unicorn.pipe
109
+ assert r
110
+ assert w
111
+
112
+ return if RUBY_PLATFORM !~ /linux/
113
+
114
+ begin
115
+ f_getpipe_sz = 1032
116
+ IO.pipe do |a, b|
117
+ a_sz = a.fcntl(f_getpipe_sz)
118
+ b.fcntl(f_getpipe_sz)
119
+ assert_kind_of Integer, a_sz
120
+ r_sz = r.fcntl(f_getpipe_sz)
121
+ assert_equal Raindrops::PAGE_SIZE, r_sz
122
+ assert_operator a_sz, :>=, r_sz
123
+ end
124
+ rescue Errno::EINVAL
125
+ # Linux <= 2.6.34
126
+ end
127
+ ensure
128
+ w.close
129
+ r.close
130
+ end
105
131
  end
@@ -0,0 +1,34 @@
1
+ require 'test/unit'
2
+ require 'unicorn'
3
+ require 'unicorn/select_waiter'
4
+ class TestSelectWaiter < Test::Unit::TestCase
5
+
6
+ def test_select_timeout # n.b. this is level-triggered
7
+ sw = Unicorn::SelectWaiter.new
8
+ IO.pipe do |r,w|
9
+ sw.get_readers(ready = [], [r], 0)
10
+ assert_equal [], ready
11
+ w.syswrite '.'
12
+ sw.get_readers(ready, [r], 1000)
13
+ assert_equal [r], ready
14
+ sw.get_readers(ready, [r], 0)
15
+ assert_equal [r], ready
16
+ end
17
+ end
18
+
19
+ def test_linux # ugh, also level-triggered, unlikely to change
20
+ IO.pipe do |r,w|
21
+ wtr = Unicorn::Waiter.prep_readers([r])
22
+ wtr.get_readers(ready = [], [r], 0)
23
+ assert_equal [], ready
24
+ w.syswrite '.'
25
+ wtr.get_readers(ready = [], [r], 1000)
26
+ assert_equal [r], ready
27
+ wtr.get_readers(ready = [], [r], 1000)
28
+ assert_equal [r], ready, 'still ready (level-triggered :<)'
29
+ assert_nil wtr.close
30
+ end
31
+ rescue SystemCallError => e
32
+ warn "#{e.message} (#{e.class})"
33
+ end if Unicorn.const_defined?(:Waiter)
34
+ end
data/unicorn.gemspec CHANGED
@@ -1,9 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
- ENV["VERSION"] or abort "VERSION= must be specified"
3
- manifest = File.readlines('.manifest').map! { |x| x.chomp! }
4
- require 'olddoc'
5
- extend Olddoc::Gemspec
6
- name, summary, title = readme_metadata
2
+ manifest = File.exist?('.manifest') ?
3
+ IO.readlines('.manifest').map!(&:chomp!) : `git ls-files`.split("\n")
7
4
 
8
5
  # don't bother with tests that fork, not worth our time to get working
9
6
  # with `gem check -t` ... (of course we care for them when testing with
@@ -14,28 +11,39 @@ end.compact
14
11
 
15
12
  Gem::Specification.new do |s|
16
13
  s.name = %q{unicorn}
17
- s.version = ENV["VERSION"].dup
18
- s.authors = ["#{name} hackers"]
19
- s.summary = summary
20
- s.description = readme_description
21
- s.email = %q{unicorn-public@bogomips.org}
14
+ s.version = (ENV['VERSION'] || '6.1.0').dup
15
+ s.authors = ['unicorn hackers']
16
+ s.summary = 'Rack HTTP server for fast clients and Unix'
17
+ s.description = File.read('README').split("\n\n")[1]
18
+ s.email = %q{unicorn-public@yhbt.net}
22
19
  s.executables = %w(unicorn unicorn_rails)
23
20
  s.extensions = %w(ext/unicorn_http/extconf.rb)
24
- s.extra_rdoc_files = extra_rdoc_files(manifest)
21
+ s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
22
+ File.exist?(f)
23
+ end
25
24
  s.files = manifest
26
- s.homepage = Olddoc.config['rdoc_url']
25
+ s.homepage = 'https://yhbt.net/unicorn/'
27
26
  s.test_files = test_files
28
27
 
29
- # for people that are absolutely stuck on Rails 2.3.2 and can't
30
- # up/downgrade to any other version, the Rack dependency may be
31
- # commented out. Nevertheless, upgrading to Rails 2.3.4 or later is
32
- # *strongly* recommended for security reasons.
33
- s.add_dependency(%q<rack>)
28
+ # 2.0.0 is the minimum supported version. We don't specify
29
+ # a maximum version to make it easier to test pre-releases,
30
+ # but we do warn users if they install unicorn on an untested
31
+ # version in extconf.rb
32
+ s.required_ruby_version = ">= 2.0.0"
33
+
34
+ # We do not have a hard dependency on rack, it's possible to load
35
+ # things which respond to #call. HTTP status lines in responses
36
+ # won't have descriptive text, only the numeric status.
37
+ s.add_development_dependency(%q<rack>)
38
+
34
39
  s.add_dependency(%q<kgio>, '~> 2.6')
35
40
  s.add_dependency(%q<raindrops>, '~> 0.7')
36
41
 
37
42
  s.add_development_dependency('test-unit', '~> 3.0')
38
- s.add_development_dependency('olddoc', '~> 1.0')
39
43
 
40
- s.licenses = ["GPLv2+", "Ruby 1.8"]
44
+ # Note: To avoid ambiguity, we intentionally avoid the SPDX-compatible
45
+ # 'Ruby' here since Ruby 1.9.3 switched to BSD-2-Clause, but we
46
+ # inherited our license from Mongrel when Ruby was at 1.8.
47
+ # We cannot automatically switch licenses when Ruby changes.
48
+ s.licenses = ['GPL-2.0+', 'Ruby-1.8']
41
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.0
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Unicorn hackers
7
+ - unicorn hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-24 00:00:00.000000000 Z
11
+ date: 2021-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -66,27 +66,13 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
- - !ruby/object:Gem::Dependency
70
- name: olddoc
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.0'
83
69
  description: |-
84
- \Unicorn is an HTTP server for Rack applications designed to only serve
70
+ unicorn is an HTTP server for Rack applications designed to only serve
85
71
  fast clients on low-latency, high-bandwidth connections and take
86
72
  advantage of features in Unix/Unix-like kernels. Slow clients should
87
73
  only be served by placing a reverse proxy capable of fully buffering
88
- both the the request and response in between \Unicorn and slow clients.
89
- email: unicorn-public@bogomips.org
74
+ both the the request and response in between unicorn and slow clients.
75
+ email: unicorn-public@yhbt.net
90
76
  executables:
91
77
  - unicorn
92
78
  - unicorn_rails
@@ -124,6 +110,7 @@ extra_rdoc_files:
124
110
  files:
125
111
  - ".CHANGELOG.old"
126
112
  - ".document"
113
+ - ".gitattributes"
127
114
  - ".gitignore"
128
115
  - ".mailmap"
129
116
  - ".manifest"
@@ -133,9 +120,8 @@ files:
133
120
  - COPYING
134
121
  - DESIGN
135
122
  - Documentation/.gitignore
136
- - Documentation/GNUmakefile
137
- - Documentation/unicorn.1.txt
138
- - Documentation/unicorn_rails.1.txt
123
+ - Documentation/unicorn.1
124
+ - Documentation/unicorn_rails.1
139
125
  - FAQ
140
126
  - GIT-VERSION-FILE
141
127
  - GIT-VERSION-GEN
@@ -160,16 +146,18 @@ files:
160
146
  - bin/unicorn_rails
161
147
  - examples/big_app_gc.rb
162
148
  - examples/echo.ru
163
- - examples/git.ru
164
149
  - examples/init.sh
165
150
  - examples/logger_mp_safe.rb
166
151
  - examples/logrotate.conf
167
152
  - examples/nginx.conf
168
153
  - examples/unicorn.conf.minimal.rb
169
154
  - examples/unicorn.conf.rb
155
+ - examples/unicorn.socket
156
+ - examples/unicorn@.service
170
157
  - ext/unicorn_http/CFLAGS
171
158
  - ext/unicorn_http/c_util.h
172
159
  - ext/unicorn_http/common_field_optimization.h
160
+ - ext/unicorn_http/epollexclusive.h
173
161
  - ext/unicorn_http/ext_help.h
174
162
  - ext/unicorn_http/extconf.rb
175
163
  - ext/unicorn_http/global_variables.h
@@ -178,8 +166,6 @@ files:
178
166
  - ext/unicorn_http/unicorn_http.rl
179
167
  - ext/unicorn_http/unicorn_http_common.rl
180
168
  - lib/unicorn.rb
181
- - lib/unicorn/app/exec_cgi.rb
182
- - lib/unicorn/app/inetd.rb
183
169
  - lib/unicorn/app/old_rails.rb
184
170
  - lib/unicorn/app/old_rails/static.rb
185
171
  - lib/unicorn/cgi_wrapper.rb
@@ -191,10 +177,8 @@ files:
191
177
  - lib/unicorn/launcher.rb
192
178
  - lib/unicorn/oob_gc.rb
193
179
  - lib/unicorn/preread_input.rb
180
+ - lib/unicorn/select_waiter.rb
194
181
  - lib/unicorn/socket_helper.rb
195
- - lib/unicorn/ssl_client.rb
196
- - lib/unicorn/ssl_configurator.rb
197
- - lib/unicorn/ssl_server.rb
198
182
  - lib/unicorn/stream_input.rb
199
183
  - lib/unicorn/tee_input.rb
200
184
  - lib/unicorn/tmpio.rb
@@ -215,7 +199,6 @@ files:
215
199
  - t/env.ru
216
200
  - t/fails-rack-lint.ru
217
201
  - t/heartbeat-timeout.ru
218
- - t/hijack.ru
219
202
  - t/listener_names.ru
220
203
  - t/my-tap-lib.sh
221
204
  - t/oob_gc.ru
@@ -245,8 +228,6 @@ files:
245
228
  - t/t0014-rewindable-input-true.sh
246
229
  - t/t0014.ru
247
230
  - t/t0015-configurator-internals.sh
248
- - t/t0016-trust-x-forwarded-false.sh
249
- - t/t0017-trust-x-forwarded-true.sh
250
231
  - t/t0018-write-on-close.sh
251
232
  - t/t0019-max_header_len.sh
252
233
  - t/t0020-at_exit-handler.sh
@@ -255,8 +236,9 @@ files:
255
236
  - t/t0100-rack-input-tests.sh
256
237
  - t/t0116-client_body_buffer_size.sh
257
238
  - t/t0116.ru
258
- - t/t0200-rack-hijack.sh
259
239
  - t/t0300-no-default-middleware.sh
240
+ - t/t0301-no-default-middleware-ignored-in-config.sh
241
+ - t/t0301.ru
260
242
  - t/t9000-preread-input.sh
261
243
  - t/t9001-oob_gc.sh
262
244
  - t/t9002-oob_gc-path.sh
@@ -265,32 +247,35 @@ files:
265
247
  - test/aggregate.rb
266
248
  - test/benchmark/README
267
249
  - test/benchmark/dd.ru
250
+ - test/benchmark/ddstream.ru
251
+ - test/benchmark/readinput.ru
268
252
  - test/benchmark/stack.ru
253
+ - test/benchmark/uconnect.perl
269
254
  - test/exec/README
270
255
  - test/exec/test_exec.rb
271
256
  - test/test_helper.rb
257
+ - test/unit/test_ccc.rb
272
258
  - test/unit/test_configurator.rb
273
259
  - test/unit/test_droplet.rb
274
260
  - test/unit/test_http_parser.rb
275
261
  - test/unit/test_http_parser_ng.rb
276
- - test/unit/test_http_parser_xftrust.rb
277
262
  - test/unit/test_request.rb
278
263
  - test/unit/test_response.rb
279
264
  - test/unit/test_server.rb
280
265
  - test/unit/test_signals.rb
281
- - test/unit/test_sni_hostnames.rb
282
266
  - test/unit/test_socket_helper.rb
283
267
  - test/unit/test_stream_input.rb
284
268
  - test/unit/test_tee_input.rb
285
269
  - test/unit/test_upload.rb
286
270
  - test/unit/test_util.rb
271
+ - test/unit/test_waiter.rb
287
272
  - unicorn.gemspec
288
273
  - unicorn_1
289
274
  - unicorn_rails_1
290
- homepage: http://unicorn.bogomips.org/
275
+ homepage: https://yhbt.net/unicorn/
291
276
  licenses:
292
- - GPLv2+
293
- - Ruby 1.8
277
+ - GPL-2.0+
278
+ - Ruby-1.8
294
279
  metadata: {}
295
280
  post_install_message:
296
281
  rdoc_options: []
@@ -300,15 +285,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
300
285
  requirements:
301
286
  - - ">="
302
287
  - !ruby/object:Gem::Version
303
- version: '0'
288
+ version: 2.0.0
304
289
  required_rubygems_version: !ruby/object:Gem::Requirement
305
290
  requirements:
306
291
  - - ">="
307
292
  - !ruby/object:Gem::Version
308
293
  version: '0'
309
294
  requirements: []
310
- rubyforge_project:
311
- rubygems_version: 2.4.5
295
+ rubygems_version: 3.0.2
312
296
  signing_key:
313
297
  specification_version: 4
314
298
  summary: Rack HTTP server for fast clients and Unix
@@ -316,9 +300,8 @@ test_files:
316
300
  - test/unit/test_configurator.rb
317
301
  - test/unit/test_http_parser.rb
318
302
  - test/unit/test_http_parser_ng.rb
319
- - test/unit/test_http_parser_xftrust.rb
320
303
  - test/unit/test_request.rb
321
- - test/unit/test_response.rb
322
304
  - test/unit/test_server.rb
323
- - test/unit/test_sni_hostnames.rb
305
+ - test/unit/test_upload.rb
324
306
  - test/unit/test_util.rb
307
+ - test/unit/test_waiter.rb
@@ -1,30 +0,0 @@
1
- all::
2
-
3
- PANDOC = pandoc
4
- PANDOC_OPTS = -f markdown --email-obfuscation=none
5
- pandoc = $(PANDOC) $(PANDOC_OPTS)
6
- pandoc_html = $(pandoc) --toc -t html --no-wrap
7
-
8
- man1 := $(addsuffix .1,unicorn unicorn_rails)
9
- html1 := $(addsuffix .html,$(man1))
10
-
11
- all:: html man
12
-
13
- html: $(html1)
14
- man: $(man1)
15
-
16
- install-html: html
17
- mkdir -p ../doc/man1
18
- install -m 644 $(html1) ../doc/man1
19
-
20
- install-man: man
21
- mkdir -p ../man/man1
22
- install -m 644 $(man1) ../man/man1
23
-
24
- %.1: %.1.txt
25
- $(pandoc) -s -t man < $< > $@+ && mv $@+ $@
26
- %.1.html: %.1.txt
27
- $(pandoc_html) < $< > $@+ && mv $@+ $@
28
-
29
- clean::
30
- $(RM) $(man1) $(html1)