rhebok 0.8.6 → 0.9.0
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.
- checksums.yaml +4 -4
- data/Changes +5 -0
- data/ext/rhebok/picohttpparser/.clang-format +6 -0
- data/ext/rhebok/picohttpparser/Jamfile +7 -0
- data/ext/rhebok/picohttpparser/README.md +92 -0
- data/ext/rhebok/picohttpparser/bench.c +32 -19
- data/ext/rhebok/picohttpparser/picohttpparser.c +509 -342
- data/ext/rhebok/picohttpparser/picohttpparser.h +37 -14
- data/ext/rhebok/picohttpparser/test.c +366 -204
- data/ext/rhebok/rhebok.c +23 -4
- data/lib/rack/handler/rhebok.rb +7 -13
- data/lib/rhebok/version.rb +1 -1
- data/rhebok.gemspec +1 -1
- metadata +7 -5
data/ext/rhebok/rhebok.c
CHANGED
@@ -2,6 +2,9 @@
|
|
2
2
|
#include <time.h>
|
3
3
|
#include <ctype.h>
|
4
4
|
#include <poll.h>
|
5
|
+
#ifndef __need_IOV_MAX
|
6
|
+
#define __need_IOV_MAX
|
7
|
+
#endif
|
5
8
|
#include <sys/uio.h>
|
6
9
|
#include <errno.h>
|
7
10
|
#include <limits.h>
|
@@ -14,6 +17,16 @@
|
|
14
17
|
#include <arpa/inet.h>
|
15
18
|
#include "picohttpparser/picohttpparser.c"
|
16
19
|
|
20
|
+
#ifndef IOV_MAX
|
21
|
+
#if defined(__FreeBSD__) || defined(__APPLE__)
|
22
|
+
# define IOV_MAX 128
|
23
|
+
#endif
|
24
|
+
#endif
|
25
|
+
|
26
|
+
#ifndef IOV_MAX
|
27
|
+
# error "Unable to determine IOV_MAX from system headers"
|
28
|
+
#endif
|
29
|
+
|
17
30
|
#define MAX_HEADER_SIZE 16384
|
18
31
|
#define MAX_HEADER_NAME_LEN 1024
|
19
32
|
#define MAX_HEADERS 128
|
@@ -679,6 +692,7 @@ VALUE rhe_write_chunk(VALUE self, VALUE fileno, VALUE buf, VALUE offsetv, VALUE
|
|
679
692
|
ssize_t written = 0;
|
680
693
|
ssize_t vec_offset = 0;
|
681
694
|
int count =0;
|
695
|
+
int remain;
|
682
696
|
ssize_t iovcnt = 3;
|
683
697
|
char chunked_header_buf[18];
|
684
698
|
|
@@ -700,7 +714,8 @@ VALUE rhe_write_chunk(VALUE self, VALUE fileno, VALUE buf, VALUE offsetv, VALUE
|
|
700
714
|
|
701
715
|
vec_offset = 0;
|
702
716
|
written = 0;
|
703
|
-
|
717
|
+
remain = iovcnt;
|
718
|
+
while ( remain > 0 ) {
|
704
719
|
count = (iovcnt > IOV_MAX) ? IOV_MAX : iovcnt;
|
705
720
|
rv = _writev_timeout(NUM2INT(fileno), NUM2DBL(timeout), &v[vec_offset], count - vec_offset, (vec_offset == 0) ? 0 : 1);
|
706
721
|
if ( rv <= 0 ) {
|
@@ -710,8 +725,9 @@ VALUE rhe_write_chunk(VALUE self, VALUE fileno, VALUE buf, VALUE offsetv, VALUE
|
|
710
725
|
written += rv;
|
711
726
|
while ( rv > 0 ) {
|
712
727
|
if ( (unsigned int)rv >= v[vec_offset].iov_len ) {
|
713
|
-
|
728
|
+
rv -= v[vec_offset].iov_len;
|
714
729
|
vec_offset++;
|
730
|
+
remain--;
|
715
731
|
}
|
716
732
|
else {
|
717
733
|
v[vec_offset].iov_base = (char*)v[vec_offset].iov_base + rv;
|
@@ -774,6 +790,7 @@ VALUE rhe_write_response(VALUE self, VALUE filenov, VALUE timeoutv, VALUE status
|
|
774
790
|
ssize_t written;
|
775
791
|
int count;
|
776
792
|
int i;
|
793
|
+
int remain;
|
777
794
|
char status_line[512];
|
778
795
|
char date_line[512];
|
779
796
|
char server_line[1032];
|
@@ -940,7 +957,8 @@ VALUE rhe_write_response(VALUE self, VALUE filenov, VALUE timeoutv, VALUE status
|
|
940
957
|
|
941
958
|
vec_offset = 0;
|
942
959
|
written = 0;
|
943
|
-
|
960
|
+
remain = iovcnt;
|
961
|
+
while ( remain > 0 ) {
|
944
962
|
count = (iovcnt > IOV_MAX) ? IOV_MAX : iovcnt;
|
945
963
|
rv = _writev_timeout(fileno, timeout, &v[vec_offset], count - vec_offset, (vec_offset == 0) ? 0 : 1);
|
946
964
|
if ( rv <= 0 ) {
|
@@ -950,8 +968,9 @@ VALUE rhe_write_response(VALUE self, VALUE filenov, VALUE timeoutv, VALUE status
|
|
950
968
|
written += rv;
|
951
969
|
while ( rv > 0 ) {
|
952
970
|
if ( (unsigned int)rv >= v[vec_offset].iov_len ) {
|
953
|
-
|
971
|
+
rv -= v[vec_offset].iov_len;
|
954
972
|
vec_offset++;
|
973
|
+
remain--;
|
955
974
|
}
|
956
975
|
else {
|
957
976
|
v[vec_offset].iov_base = (char*)v[vec_offset].iov_base + rv;
|
data/lib/rack/handler/rhebok.rb
CHANGED
@@ -169,7 +169,10 @@ module Rack
|
|
169
169
|
self.accept_loop(app)
|
170
170
|
end
|
171
171
|
end
|
172
|
-
|
172
|
+
|
173
|
+
while pe.wait_all_children(1) > 0
|
174
|
+
pe.signal_all_children('TERM')
|
175
|
+
end
|
173
176
|
end
|
174
177
|
|
175
178
|
def _calc_reqs_per_child
|
@@ -200,17 +203,10 @@ module Rack
|
|
200
203
|
|
201
204
|
|
202
205
|
def accept_loop(app)
|
203
|
-
@can_exit = true
|
204
206
|
@term_received = 0
|
205
207
|
proc_req_count = 0
|
206
208
|
Signal.trap(:TERM) do
|
207
209
|
@term_received += 1
|
208
|
-
if @can_exit
|
209
|
-
exit!(true)
|
210
|
-
end
|
211
|
-
if @can_exit || @term_received > 1
|
212
|
-
exit!(true)
|
213
|
-
end
|
214
210
|
end
|
215
211
|
Signal.trap(:PIPE, "IGNORE")
|
216
212
|
max_reqs = self._calc_reqs_per_child()
|
@@ -230,7 +226,9 @@ module Rack
|
|
230
226
|
}
|
231
227
|
|
232
228
|
while @options[:MaxRequestPerChild].to_i == 0 || proc_req_count < max_reqs
|
233
|
-
@
|
229
|
+
if @term_received > 0
|
230
|
+
exit!(true)
|
231
|
+
end
|
234
232
|
env = env_template.clone
|
235
233
|
connection, buf = ::Rhebok.accept_rack(fileno, @options[:Timeout], @_is_tcp, env)
|
236
234
|
if connection
|
@@ -238,7 +236,6 @@ module Rack
|
|
238
236
|
buffer = nil
|
239
237
|
begin
|
240
238
|
proc_req_count += 1
|
241
|
-
@can_exit = false
|
242
239
|
# handle request
|
243
240
|
if env.key?("CONTENT_LENGTH") && env["CONTENT_LENGTH"].to_i > 0
|
244
241
|
cl = env["CONTENT_LENGTH"].to_i
|
@@ -336,9 +333,6 @@ module Rack
|
|
336
333
|
end
|
337
334
|
end #begin
|
338
335
|
end # accept
|
339
|
-
if @term_received > 0
|
340
|
-
exit!(true)
|
341
|
-
end
|
342
336
|
end #while max_reqs
|
343
337
|
end #def
|
344
338
|
|
data/lib/rhebok/version.rb
CHANGED
data/rhebok.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_development_dependency "bacon"
|
26
26
|
spec.add_dependency "rack"
|
27
|
-
spec.add_dependency "prefork_engine", ">= 0.0.
|
27
|
+
spec.add_dependency "prefork_engine", ">= 0.0.6"
|
28
28
|
|
29
29
|
# get an array of submodule dirs by executing 'pwd' inside each submodule
|
30
30
|
`git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhebok
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro Nagano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.0.
|
75
|
+
version: 0.0.6
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.0.
|
82
|
+
version: 0.0.6
|
83
83
|
description: High Performance and Optimized Preforked Rack Handler
|
84
84
|
email:
|
85
85
|
- kazeburo@gmail.com
|
@@ -97,9 +97,11 @@ files:
|
|
97
97
|
- README.md
|
98
98
|
- Rakefile
|
99
99
|
- ext/rhebok/extconf.rb
|
100
|
+
- ext/rhebok/picohttpparser/.clang-format
|
100
101
|
- ext/rhebok/picohttpparser/.gitattributes
|
101
102
|
- ext/rhebok/picohttpparser/.gitmodules
|
102
103
|
- ext/rhebok/picohttpparser/.travis.yml
|
104
|
+
- ext/rhebok/picohttpparser/Jamfile
|
103
105
|
- ext/rhebok/picohttpparser/Makefile
|
104
106
|
- ext/rhebok/picohttpparser/README.md
|
105
107
|
- ext/rhebok/picohttpparser/bench.c
|
@@ -141,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
143
|
version: '0'
|
142
144
|
requirements: []
|
143
145
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.4.5
|
146
|
+
rubygems_version: 2.4.5.1
|
145
147
|
signing_key:
|
146
148
|
specification_version: 4
|
147
149
|
summary: High Performance Preforked Rack Handler
|