polyphony 0.98 → 0.99
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/CHANGELOG.md +7 -0
- data/examples/io/https_server_sni_2.rb +14 -8
- data/ext/polyphony/extconf.rb +6 -5
- data/ext/polyphony/libev.h +0 -2
- data/lib/polyphony/core/sync.rb +53 -0
- data/lib/polyphony/extensions/io.rb +37 -14
- data/lib/polyphony/extensions/openssl.rb +1 -1
- data/lib/polyphony/version.rb +1 -1
- data/test/test_io.rb +6 -7
- data/test/test_socket.rb +61 -0
- data/test/test_sync.rb +42 -1
- data/vendor/liburing/.github/workflows/build.yml +7 -16
- data/vendor/liburing/.gitignore +5 -0
- data/vendor/liburing/CHANGELOG +23 -1
- data/vendor/liburing/Makefile +4 -3
- data/vendor/liburing/Makefile.common +1 -0
- data/vendor/liburing/README +48 -0
- data/vendor/liburing/configure +76 -6
- data/vendor/liburing/debian/changelog +11 -0
- data/vendor/liburing/debian/control +7 -16
- data/vendor/liburing/debian/liburing-dev.manpages +3 -6
- data/vendor/liburing/debian/liburing2.install +1 -0
- data/vendor/liburing/debian/liburing2.symbols +56 -0
- data/vendor/liburing/debian/rules +15 -68
- data/vendor/liburing/examples/Makefile +4 -0
- data/vendor/liburing/examples/io_uring-close-test.c +123 -0
- data/vendor/liburing/examples/io_uring-udp.c +1 -1
- data/vendor/liburing/examples/send-zerocopy.c +315 -56
- data/vendor/liburing/examples/ucontext-cp.c +2 -17
- data/vendor/liburing/liburing-ffi.pc.in +12 -0
- data/vendor/liburing/liburing.pc.in +1 -1
- data/vendor/liburing/liburing.spec +1 -1
- data/vendor/liburing/make-debs.sh +3 -3
- data/vendor/liburing/man/IO_URING_CHECK_VERSION.3 +1 -0
- data/vendor/liburing/man/IO_URING_VERSION_MAJOR.3 +1 -0
- data/vendor/liburing/man/IO_URING_VERSION_MINOR.3 +1 -0
- data/vendor/liburing/man/io_uring_buf_ring_add.3 +6 -6
- data/vendor/liburing/man/io_uring_check_version.3 +72 -0
- data/vendor/liburing/man/io_uring_close_ring_fd.3 +43 -0
- data/vendor/liburing/man/io_uring_major_version.3 +1 -0
- data/vendor/liburing/man/io_uring_minor_version.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_accept.3 +1 -1
- data/vendor/liburing/man/io_uring_prep_fgetxattr.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_fsetxattr.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_getxattr.3 +61 -0
- data/vendor/liburing/man/io_uring_prep_link_timeout.3 +94 -0
- data/vendor/liburing/man/io_uring_prep_msg_ring.3 +22 -2
- data/vendor/liburing/man/io_uring_prep_msg_ring_cqe_flags.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_poll_add.3 +1 -1
- data/vendor/liburing/man/io_uring_prep_provide_buffers.3 +18 -9
- data/vendor/liburing/man/io_uring_prep_readv.3 +3 -3
- data/vendor/liburing/man/io_uring_prep_readv2.3 +3 -3
- data/vendor/liburing/man/io_uring_prep_recv.3 +5 -5
- data/vendor/liburing/man/io_uring_prep_recvmsg.3 +4 -4
- data/vendor/liburing/man/io_uring_prep_send.3 +9 -0
- data/vendor/liburing/man/io_uring_prep_send_set_addr.3 +38 -0
- data/vendor/liburing/man/io_uring_prep_send_zc.3 +39 -7
- data/vendor/liburing/man/io_uring_prep_send_zc_fixed.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_sendmsg.3 +20 -0
- data/vendor/liburing/man/io_uring_prep_sendmsg_zc.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_setxattr.3 +64 -0
- data/vendor/liburing/man/io_uring_prep_splice.3 +40 -0
- data/vendor/liburing/man/io_uring_prep_writev.3 +2 -2
- data/vendor/liburing/man/io_uring_prep_writev2.3 +2 -2
- data/vendor/liburing/man/io_uring_recvmsg_out.3 +13 -9
- data/vendor/liburing/man/io_uring_register.2 +15 -9
- data/vendor/liburing/man/io_uring_register_buf_ring.3 +4 -4
- data/vendor/liburing/man/io_uring_register_buffers.3 +49 -6
- data/vendor/liburing/man/io_uring_register_buffers_sparse.3 +1 -0
- data/vendor/liburing/man/io_uring_register_buffers_tags.3 +1 -0
- data/vendor/liburing/man/io_uring_register_buffers_update_tag.3 +1 -0
- data/vendor/liburing/man/io_uring_register_files.3 +60 -5
- data/vendor/liburing/man/io_uring_register_files_tags.3 +1 -0
- data/vendor/liburing/man/io_uring_register_files_update.3 +1 -0
- data/vendor/liburing/man/io_uring_register_files_update_tag.3 +1 -0
- data/vendor/liburing/man/io_uring_setup.2 +31 -2
- data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +1 -1
- data/vendor/liburing/src/Makefile +25 -3
- data/vendor/liburing/src/ffi.c +15 -0
- data/vendor/liburing/src/include/liburing/io_uring.h +30 -7
- data/vendor/liburing/src/include/liburing.h +190 -148
- data/vendor/liburing/src/int_flags.h +1 -0
- data/vendor/liburing/src/lib.h +5 -16
- data/vendor/liburing/src/liburing-ffi.map +172 -0
- data/vendor/liburing/src/liburing.map +11 -0
- data/vendor/liburing/src/nolibc.c +9 -2
- data/vendor/liburing/src/queue.c +2 -2
- data/vendor/liburing/src/register.c +66 -96
- data/vendor/liburing/src/setup.c +5 -4
- data/vendor/liburing/src/version.c +21 -0
- data/vendor/liburing/test/232c93d07b74.c +3 -3
- data/vendor/liburing/test/35fa71a030ca.c +3 -3
- data/vendor/liburing/test/500f9fbadef8.c +2 -0
- data/vendor/liburing/test/917257daa0fe.c +1 -1
- data/vendor/liburing/test/Makefile +27 -7
- data/vendor/liburing/test/a0908ae19763.c +2 -2
- data/vendor/liburing/test/a4c0b3decb33.c +2 -2
- data/vendor/liburing/test/accept-link.c +4 -4
- data/vendor/liburing/test/accept-reuse.c +5 -7
- data/vendor/liburing/test/accept.c +34 -31
- data/vendor/liburing/test/b19062a56726.c +1 -1
- data/vendor/liburing/test/buf-ring.c +58 -4
- data/vendor/liburing/test/ce593a6c480a.c +2 -2
- data/vendor/liburing/test/close-opath.c +2 -1
- data/vendor/liburing/test/connect.c +8 -0
- data/vendor/liburing/test/cq-overflow.c +14 -8
- data/vendor/liburing/test/d4ae271dfaae.c +1 -1
- data/vendor/liburing/test/defer-taskrun.c +64 -9
- data/vendor/liburing/test/defer.c +1 -1
- data/vendor/liburing/test/double-poll-crash.c +3 -3
- data/vendor/liburing/test/eeed8b54e0df.c +8 -3
- data/vendor/liburing/test/eploop.c +74 -0
- data/vendor/liburing/test/eventfd-ring.c +1 -1
- data/vendor/liburing/test/eventfd.c +1 -1
- data/vendor/liburing/test/evloop.c +73 -0
- data/vendor/liburing/test/exit-no-cleanup.c +1 -1
- data/vendor/liburing/test/fadvise.c +1 -1
- data/vendor/liburing/test/fc2a85cb02ef.c +3 -3
- data/vendor/liburing/test/fd-pass.c +35 -16
- data/vendor/liburing/test/file-register.c +61 -0
- data/vendor/liburing/test/file-verify.c +2 -2
- data/vendor/liburing/test/files-exit-hang-timeout.c +2 -2
- data/vendor/liburing/test/fixed-link.c +1 -1
- data/vendor/liburing/test/fsnotify.c +118 -0
- data/vendor/liburing/test/hardlink.c +1 -1
- data/vendor/liburing/test/helpers.c +54 -2
- data/vendor/liburing/test/helpers.h +4 -0
- data/vendor/liburing/test/io-cancel.c +3 -1
- data/vendor/liburing/test/io_uring_passthrough.c +39 -8
- data/vendor/liburing/test/io_uring_setup.c +3 -80
- data/vendor/liburing/test/iopoll-overflow.c +118 -0
- data/vendor/liburing/test/iopoll.c +90 -4
- data/vendor/liburing/test/lfs-openat-write.c +7 -9
- data/vendor/liburing/test/lfs-openat.c +6 -8
- data/vendor/liburing/test/link_drain.c +31 -5
- data/vendor/liburing/test/madvise.c +1 -1
- data/vendor/liburing/test/msg-ring-flags.c +192 -0
- data/vendor/liburing/test/msg-ring-overflow.c +159 -0
- data/vendor/liburing/test/msg-ring.c +173 -13
- data/vendor/liburing/test/multicqes_drain.c +22 -19
- data/vendor/liburing/test/nvme.h +4 -3
- data/vendor/liburing/test/pipe-bug.c +95 -0
- data/vendor/liburing/test/poll-link.c +3 -3
- data/vendor/liburing/test/poll-many.c +41 -19
- data/vendor/liburing/test/poll-mshot-overflow.c +105 -2
- data/vendor/liburing/test/poll-race-mshot.c +292 -0
- data/vendor/liburing/test/poll-race.c +105 -0
- data/vendor/liburing/test/poll.c +244 -26
- data/vendor/liburing/test/pollfree.c +5 -5
- data/vendor/liburing/test/read-before-exit.c +20 -3
- data/vendor/liburing/test/read-write.c +2 -0
- data/vendor/liburing/test/recv-multishot.c +96 -3
- data/vendor/liburing/test/reg-reg-ring.c +90 -0
- data/vendor/liburing/test/rename.c +1 -1
- data/vendor/liburing/test/ring-leak.c +0 -1
- data/vendor/liburing/test/ring-leak2.c +1 -1
- data/vendor/liburing/test/ringbuf-read.c +10 -6
- data/vendor/liburing/test/send-zerocopy.c +273 -103
- data/vendor/liburing/test/send_recv.c +7 -4
- data/vendor/liburing/test/sendmsg_fs_cve.c +2 -2
- data/vendor/liburing/test/single-issuer.c +7 -9
- data/vendor/liburing/test/skip-cqe.c +3 -4
- data/vendor/liburing/test/socket.c +0 -1
- data/vendor/liburing/test/sq-poll-dup.c +10 -3
- data/vendor/liburing/test/sq-poll-kthread.c +1 -1
- data/vendor/liburing/test/sq-poll-share.c +3 -2
- data/vendor/liburing/test/sqpoll-cancel-hang.c +17 -6
- data/vendor/liburing/test/sqpoll-disable-exit.c +4 -4
- data/vendor/liburing/test/symlink.c +2 -1
- data/vendor/liburing/test/test.h +2 -1
- data/vendor/liburing/test/timeout-new.c +11 -7
- data/vendor/liburing/test/timeout.c +1 -2
- data/vendor/liburing/test/unlink.c +1 -1
- data/vendor/liburing/test/version.c +25 -0
- data/vendor/liburing/test/wakeup-hang.c +1 -1
- data/vendor/liburing/test/xattr.c +8 -4
- metadata +42 -6
- data/vendor/liburing/debian/compat +0 -1
- data/vendor/liburing/debian/liburing1-udeb.install +0 -1
- data/vendor/liburing/debian/liburing1.install +0 -1
- data/vendor/liburing/debian/liburing1.symbols +0 -32
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4696bb7b13f68b379c29d5c38257e57c13aefd299f88727107e2f0f0a3c7d360
|
|
4
|
+
data.tar.gz: 94a3eeb8575d0d5fe6f143ab41351024b50c4c4cf919edec6c8155d9ead2831e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e1798e18b0e7a35104009d6f480191f5ed5efd7dee69189d443cb57ab8ca2f8fd75105234cd60f52ecea2348a8c3d85f152aa869374ea8dfbab8895a2015b04
|
|
7
|
+
data.tar.gz: 835b2be245f60b04d5b750bcce6e679b11c671e31c3d0269aeafaa961c52c501193f67cf00f4f7cc5570cab499105d025863189767db8ae79f961a62d903b173
|
data/CHANGELOG.md
CHANGED
|
@@ -27,15 +27,21 @@ server = Polyphony::Net.tcp_listen('localhost', 1234, opts)
|
|
|
27
27
|
|
|
28
28
|
puts 'Serving HTTPS on port 1234'
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
server.accept_loop do |socket|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
begin
|
|
31
|
+
server.accept_loop(false) do |socket|
|
|
32
|
+
spin do
|
|
33
|
+
while (data = socket.gets("\n", 8192))
|
|
34
|
+
if data.chomp.empty?
|
|
35
|
+
socket << "HTTP/1.1 200 OK\nConnection: close\nContent-Length: 4\n\nfoo\n"
|
|
36
|
+
break
|
|
37
|
+
end
|
|
38
38
|
end
|
|
39
|
+
rescue OpenSSL::SSL::SSLError
|
|
40
|
+
# ignore
|
|
39
41
|
end
|
|
40
42
|
end
|
|
43
|
+
rescue => e
|
|
44
|
+
puts '*' * 40
|
|
45
|
+
p e
|
|
46
|
+
puts e.backtrace.join("\n")
|
|
41
47
|
end
|
data/ext/polyphony/extconf.rb
CHANGED
|
@@ -55,16 +55,17 @@ if config[:io_uring]
|
|
|
55
55
|
else
|
|
56
56
|
$defs << "-DPOLYPHONY_BACKEND_LIBEV"
|
|
57
57
|
$defs << "-DPOLYPHONY_LINUX" if config[:linux]
|
|
58
|
-
|
|
59
|
-
$defs <<
|
|
60
|
-
$defs << '-DEV_USE_POLL' if have_type('port_event_t', 'poll.h')
|
|
58
|
+
|
|
59
|
+
$defs << "-DEV_STANDALONE" # prevent libev from assuming "config.h" exists
|
|
61
60
|
$defs << '-DEV_USE_EPOLL' if have_header('sys/epoll.h')
|
|
62
61
|
$defs << '-DEV_USE_KQUEUE' if have_header('sys/event.h') && have_header('sys/queue.h')
|
|
62
|
+
$defs << '-DEV_USE_LINUXAIO' if have_header('linux/aio_abi.h')
|
|
63
|
+
$defs << '-DEV_USE_POLL' if have_type('port_event_t', 'poll.h')
|
|
63
64
|
$defs << '-DEV_USE_PORT' if have_type('port_event_t', 'port.h')
|
|
65
|
+
$defs << '-DEV_USE_SELECT' if have_header('sys/select.h')
|
|
66
|
+
|
|
64
67
|
$defs << '-DHAVE_SYS_RESOURCE_H' if have_header('sys/resource.h')
|
|
65
68
|
|
|
66
|
-
$defs << "-DEV_STANDALONE" # prevent libev from assuming "config.h" exists
|
|
67
|
-
|
|
68
69
|
$CFLAGS << " -Wno-comment"
|
|
69
70
|
$CFLAGS << " -Wno-unused-result"
|
|
70
71
|
$CFLAGS << " -Wno-dangling-else"
|
data/ext/polyphony/libev.h
CHANGED
data/lib/polyphony/core/sync.rb
CHANGED
|
@@ -58,6 +58,58 @@ module Polyphony
|
|
|
58
58
|
@holding_fiber
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
+
# Obtains a lock. Raises `ThreadError` if mutex is locked by the current
|
|
62
|
+
# thread.
|
|
63
|
+
#
|
|
64
|
+
# @return [Mutex] self
|
|
65
|
+
def lock
|
|
66
|
+
raise ThreadError if owned?
|
|
67
|
+
|
|
68
|
+
@token = @store.shift
|
|
69
|
+
@holding_fiber = Fiber.current
|
|
70
|
+
self
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Releases the lock. Raises `ThreadError` if mutex is not locked by the
|
|
74
|
+
# current thread.
|
|
75
|
+
#
|
|
76
|
+
# @return [Mutex] self
|
|
77
|
+
def unlock
|
|
78
|
+
raise ThreadError if !owned?
|
|
79
|
+
|
|
80
|
+
@holding_fiber = nil
|
|
81
|
+
@store << @token if @token
|
|
82
|
+
@token = nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Attempts to obtain the lock and returns immediately. Returns `true` if the
|
|
86
|
+
# lock was granted.
|
|
87
|
+
#
|
|
88
|
+
# @return [true, false]
|
|
89
|
+
def try_lock
|
|
90
|
+
return false if @holding_fiber
|
|
91
|
+
|
|
92
|
+
@token = @store.shift
|
|
93
|
+
@holding_fiber = Fiber.current
|
|
94
|
+
true
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Releases the lock and sleeps timeout seconds if it is given and non-nil or
|
|
98
|
+
# forever. Raises `ThreadError` if mutex wasn’t locked by the current
|
|
99
|
+
# thread.
|
|
100
|
+
#
|
|
101
|
+
# @param timeout [nil, Number] sleep timeout
|
|
102
|
+
# @return [Number] slept time in seconds
|
|
103
|
+
def sleep(timeout = nil)
|
|
104
|
+
unlock
|
|
105
|
+
t0 = Time.now
|
|
106
|
+
Kernel.sleep(timeout)
|
|
107
|
+
t1 = Time.now
|
|
108
|
+
lock
|
|
109
|
+
|
|
110
|
+
return t1 - t0
|
|
111
|
+
end
|
|
112
|
+
|
|
61
113
|
private
|
|
62
114
|
|
|
63
115
|
# Helper method for performing a `#synchronize` when not currently holding
|
|
@@ -72,6 +124,7 @@ module Polyphony
|
|
|
72
124
|
ensure
|
|
73
125
|
@holding_fiber = nil
|
|
74
126
|
@store << @token if @token
|
|
127
|
+
@token = nil
|
|
75
128
|
end
|
|
76
129
|
end
|
|
77
130
|
end
|
|
@@ -25,20 +25,19 @@ class ::IO
|
|
|
25
25
|
|
|
26
26
|
EMPTY_HASH = {}.freeze
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
# end
|
|
28
|
+
alias_method :orig_foreach, :foreach
|
|
29
|
+
def foreach(name, sep = $/, limit = nil, getline_args = EMPTY_HASH, &block)
|
|
30
|
+
# IO.orig_read(name).each_line(&block)
|
|
31
|
+
# raise NotImplementedError
|
|
32
|
+
|
|
33
|
+
if sep.is_a?(Integer)
|
|
34
|
+
sep = $/
|
|
35
|
+
limit = sep
|
|
36
|
+
end
|
|
37
|
+
File.open(name, 'r') do |f|
|
|
38
|
+
f.each_line(sep, limit, chomp: getline_args[:chomp], &block)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
42
41
|
|
|
43
42
|
alias_method :orig_read, :read
|
|
44
43
|
def read(name, length = nil, offset = nil, opt = EMPTY_HASH)
|
|
@@ -198,6 +197,30 @@ class ::IO
|
|
|
198
197
|
return nil
|
|
199
198
|
end
|
|
200
199
|
|
|
200
|
+
def each_line(sep = $/, limit = nil, chomp: false)
|
|
201
|
+
if sep.is_a?(Integer)
|
|
202
|
+
limit = sep
|
|
203
|
+
sep = $/
|
|
204
|
+
end
|
|
205
|
+
sep_size = sep.bytesize
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
@read_buffer ||= +''
|
|
209
|
+
|
|
210
|
+
while true
|
|
211
|
+
while (idx = @read_buffer.index(sep))
|
|
212
|
+
line = @read_buffer.slice!(0, idx + sep_size)
|
|
213
|
+
line = line.chomp if chomp
|
|
214
|
+
yield line
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
result = readpartial(8192, @read_buffer, -1)
|
|
218
|
+
return self if !result
|
|
219
|
+
end
|
|
220
|
+
rescue EOFError
|
|
221
|
+
return self
|
|
222
|
+
end
|
|
223
|
+
|
|
201
224
|
# def print(*args)
|
|
202
225
|
# end
|
|
203
226
|
|
|
@@ -200,7 +200,7 @@ class ::OpenSSL::SSL::SSLServer
|
|
|
200
200
|
def accept_loop(ignore_errors = true)
|
|
201
201
|
loop do
|
|
202
202
|
yield accept
|
|
203
|
-
rescue
|
|
203
|
+
rescue OpenSSL::SSL::SSLError, SystemCallError => e
|
|
204
204
|
raise e unless ignore_errors
|
|
205
205
|
end
|
|
206
206
|
end
|
data/lib/polyphony/version.rb
CHANGED
data/test/test_io.rb
CHANGED
|
@@ -523,13 +523,12 @@ class IOClassMethodsTest < MiniTest::Test
|
|
|
523
523
|
assert_equal BIN_DATA, s
|
|
524
524
|
end
|
|
525
525
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
# end
|
|
526
|
+
def test_foreach
|
|
527
|
+
lines = []
|
|
528
|
+
IO.foreach(__FILE__) { |l| lines << l }
|
|
529
|
+
assert_equal "# frozen_string_literal: true\n", lines[0]
|
|
530
|
+
assert_equal "end\n", lines[-1]
|
|
531
|
+
end
|
|
533
532
|
|
|
534
533
|
def test_read_class_method
|
|
535
534
|
s = IO.read(__FILE__)
|
data/test/test_socket.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require_relative 'helper'
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
require 'msgpack'
|
|
6
|
+
require 'localhost/authority'
|
|
6
7
|
|
|
7
8
|
class TCPSocketTest < MiniTest::Test
|
|
8
9
|
def start_tcp_server_on_random_port(host = '127.0.0.1')
|
|
@@ -322,3 +323,63 @@ if IS_LINUX
|
|
|
322
323
|
end
|
|
323
324
|
end
|
|
324
325
|
end
|
|
326
|
+
|
|
327
|
+
class SSLSocketTest < MiniTest::Test
|
|
328
|
+
def handle_http_request(socket)
|
|
329
|
+
while (data = socket.gets("\n", 8192))
|
|
330
|
+
if data.chomp.empty?
|
|
331
|
+
socket << "HTTP/1.1 200 OK\nConnection: close\nContent-Length: 3\n\nfoo"
|
|
332
|
+
break
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def test_ssl_accept_loop
|
|
338
|
+
authority = Localhost::Authority.fetch
|
|
339
|
+
server_ctx = authority.server_context
|
|
340
|
+
|
|
341
|
+
opts = {
|
|
342
|
+
reuse_addr: true,
|
|
343
|
+
dont_linger: true,
|
|
344
|
+
secure_context: server_ctx
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
port = rand(10001..39999)
|
|
348
|
+
server = Polyphony::Net.tcp_listen('127.0.0.1', port, opts)
|
|
349
|
+
f = spin do
|
|
350
|
+
server.accept_loop { |s| handle_http_request(s) }
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
# make bad request
|
|
354
|
+
`curl -s http://localhost:#{port}/`
|
|
355
|
+
|
|
356
|
+
msg = `curl -sk https://localhost:#{port}/`
|
|
357
|
+
assert_equal 'foo', msg
|
|
358
|
+
|
|
359
|
+
f.stop
|
|
360
|
+
f.await
|
|
361
|
+
|
|
362
|
+
port = rand(10001..39999)
|
|
363
|
+
server = Polyphony::Net.tcp_listen('127.0.0.1', port, opts)
|
|
364
|
+
errors = []
|
|
365
|
+
f = spin do
|
|
366
|
+
## without ignoring errors
|
|
367
|
+
f2 = spin do
|
|
368
|
+
server.accept_loop(false) { |s| handle_http_request(s) }
|
|
369
|
+
end
|
|
370
|
+
f2.await
|
|
371
|
+
rescue => e
|
|
372
|
+
errors << e
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
msg = `curl -sk https://localhost:#{port}/`
|
|
376
|
+
assert_equal 'foo', msg
|
|
377
|
+
|
|
378
|
+
# make bad request
|
|
379
|
+
`curl -s http://localhost:#{port}/`
|
|
380
|
+
|
|
381
|
+
f.await
|
|
382
|
+
assert_equal 1, errors.size
|
|
383
|
+
assert_kind_of OpenSSL::SSL::SSLError, errors.first
|
|
384
|
+
end
|
|
385
|
+
end
|
data/test/test_sync.rb
CHANGED
|
@@ -113,4 +113,45 @@ class MutexTest < MiniTest::Test
|
|
|
113
113
|
receive
|
|
114
114
|
assert !lock.locked?
|
|
115
115
|
end
|
|
116
|
-
|
|
116
|
+
|
|
117
|
+
def test_lock_unlock
|
|
118
|
+
m = Polyphony::Mutex.new
|
|
119
|
+
assert_nil m.locked?
|
|
120
|
+
assert_equal false, m.owned?
|
|
121
|
+
assert_raises(ThreadError) { m.unlock }
|
|
122
|
+
|
|
123
|
+
m.lock
|
|
124
|
+
assert_equal Fiber.current, m.locked?
|
|
125
|
+
assert_equal true, m.owned?
|
|
126
|
+
|
|
127
|
+
assert_raises(ThreadError) { m.lock }
|
|
128
|
+
|
|
129
|
+
m.unlock
|
|
130
|
+
assert_nil m.locked?
|
|
131
|
+
assert_equal false, m.owned?
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_try_lock
|
|
135
|
+
m = Polyphony::Mutex.new
|
|
136
|
+
|
|
137
|
+
r = m.try_lock
|
|
138
|
+
assert_equal true, r
|
|
139
|
+
|
|
140
|
+
r = m.try_lock
|
|
141
|
+
assert_equal false, r
|
|
142
|
+
|
|
143
|
+
this = Fiber.current
|
|
144
|
+
m.unlock
|
|
145
|
+
f = spin do
|
|
146
|
+
m.synchronize { this << 'ok'; sleep 0.2 }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
assert_equal 'ok', receive
|
|
150
|
+
r = m.try_lock
|
|
151
|
+
assert_equal false, r
|
|
152
|
+
|
|
153
|
+
f.await
|
|
154
|
+
r = m.try_lock
|
|
155
|
+
assert_equal true, r
|
|
156
|
+
end
|
|
157
|
+
end
|
|
@@ -26,7 +26,8 @@ jobs:
|
|
|
26
26
|
cxx_pkg: clang
|
|
27
27
|
cc: clang
|
|
28
28
|
cxx: clang++
|
|
29
|
-
|
|
29
|
+
liburing_extra_flags: -Wshorten-64-to-32
|
|
30
|
+
extra_flags: -Wmissing-prototypes -Wstrict-prototypes -Wunreachable-code-loop-increment -Wunreachable-code -Wmissing-variable-declarations -Wextra-semi-stmt
|
|
30
31
|
|
|
31
32
|
# x86 (32-bit) gcc
|
|
32
33
|
- arch: i686
|
|
@@ -85,10 +86,10 @@ jobs:
|
|
|
85
86
|
cxx: mips-linux-gnu-g++
|
|
86
87
|
|
|
87
88
|
env:
|
|
88
|
-
FLAGS: -g -O3 -Wall -Wextra -Werror
|
|
89
|
+
FLAGS: -g -O3 -Wall -Wextra -Werror -Wno-sign-compare ${{matrix.extra_flags}}
|
|
89
90
|
|
|
90
91
|
# Flags for building sources in src/ dir only.
|
|
91
|
-
LIBURING_CFLAGS: ${{matrix.
|
|
92
|
+
LIBURING_CFLAGS: ${{matrix.liburing_extra_flags}}
|
|
92
93
|
|
|
93
94
|
steps:
|
|
94
95
|
- name: Checkout source
|
|
@@ -98,9 +99,9 @@ jobs:
|
|
|
98
99
|
run: |
|
|
99
100
|
if [[ "${{matrix.cc_pkg}}" == "clang" ]]; then \
|
|
100
101
|
wget https://apt.llvm.org/llvm.sh -O /tmp/llvm.sh; \
|
|
101
|
-
sudo bash /tmp/llvm.sh
|
|
102
|
-
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-
|
|
103
|
-
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-
|
|
102
|
+
sudo bash /tmp/llvm.sh 17; \
|
|
103
|
+
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-17 400; \
|
|
104
|
+
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 400; \
|
|
104
105
|
else \
|
|
105
106
|
sudo apt-get update -y; \
|
|
106
107
|
sudo apt-get install -y ${{matrix.cc_pkg}} ${{matrix.cxx_pkg}}; \
|
|
@@ -116,16 +117,6 @@ jobs:
|
|
|
116
117
|
./configure --cc=${{matrix.cc}} --cxx=${{matrix.cxx}};
|
|
117
118
|
make -j$(nproc) V=1 CPPFLAGS="-Werror" CFLAGS="$FLAGS" CXXFLAGS="$FLAGS";
|
|
118
119
|
|
|
119
|
-
- name: Build nolibc
|
|
120
|
-
run: |
|
|
121
|
-
if [[ "${{matrix.arch}}" == "x86_64" || "${{matrix.arch}}" == "i686" || "${{matrix.arch}}" == "aarch64" ]]; then \
|
|
122
|
-
make clean; \
|
|
123
|
-
./configure --cc=${{matrix.cc}} --cxx=${{matrix.cxx}} --nolibc; \
|
|
124
|
-
make -j$(nproc) V=1 CPPFLAGS="-Werror" CFLAGS="$FLAGS" CXXFLAGS="$FLAGS"; \
|
|
125
|
-
else \
|
|
126
|
-
echo "Skipping nolibc build, this arch doesn't support building liburing without libc"; \
|
|
127
|
-
fi;
|
|
128
|
-
|
|
129
120
|
- name: Test install command
|
|
130
121
|
run: |
|
|
131
122
|
sudo make install;
|
data/vendor/liburing/.gitignore
CHANGED
|
@@ -9,8 +9,12 @@
|
|
|
9
9
|
|
|
10
10
|
/src/liburing.a
|
|
11
11
|
/src/liburing.so*
|
|
12
|
+
/src/liburing-ffi.a
|
|
13
|
+
/src/liburing-ffi.so*
|
|
12
14
|
/src/include/liburing/compat.h
|
|
15
|
+
/src/include/liburing/io_uring_version.h
|
|
13
16
|
|
|
17
|
+
/examples/io_uring-close-test
|
|
14
18
|
/examples/io_uring-cp
|
|
15
19
|
/examples/io_uring-test
|
|
16
20
|
/examples/io_uring-udp
|
|
@@ -28,5 +32,6 @@ config-host.mak
|
|
|
28
32
|
config.log
|
|
29
33
|
|
|
30
34
|
liburing.pc
|
|
35
|
+
liburing-ffi.pc
|
|
31
36
|
|
|
32
37
|
cscope.out
|
data/vendor/liburing/CHANGELOG
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
|
+
liburing-2.4 release
|
|
2
|
+
|
|
3
|
+
- Add io_uring_{major,minor,check}_version() functions.
|
|
4
|
+
- Add IO_URING_{MAJOR,MINOR,CHECK}_VERSION() macros.
|
|
5
|
+
- FFI support (for non-C/C++ languages integration).
|
|
6
|
+
- Add io_uring_prep_msg_ring_cqe_flags() function.
|
|
7
|
+
- Deprecate --nolibc configure option.
|
|
8
|
+
- CONFIG_NOLIBC is always enabled on x86-64, x86, and aarch64.
|
|
9
|
+
- Add support for IORING_REGISTER_USE_REGISTERED_RING and use if available.
|
|
10
|
+
- Add io_uring_close_ring_fd() function.
|
|
11
|
+
|
|
1
12
|
liburing-2.3 release
|
|
2
13
|
|
|
3
14
|
- Support non-libc build for aarch64.
|
|
4
15
|
- Add io_uring_{enter,enter2,register,setup} syscall functions.
|
|
5
|
-
|
|
16
|
+
- Add sync cancel interface, io_uring_register_sync_cancel().
|
|
17
|
+
- Fix return value of io_uring_submit_and_wait_timeout() to match the
|
|
18
|
+
man page.
|
|
19
|
+
- Improvements to the regression tests
|
|
20
|
+
- Add support and test case for passthrough IO
|
|
21
|
+
- Add recv and recvmsg multishot helpers and support
|
|
22
|
+
- Add documentation and support for IORING_SETUP_DEFER_TASKRUN
|
|
23
|
+
- Fix potential missing kernel entry with IORING_SETUP_IOPOLL
|
|
24
|
+
- Add support and documentation for zero-copy network transmit
|
|
25
|
+
- Various optimizations
|
|
26
|
+
- Many cleanups
|
|
27
|
+
- Many man page additions and updates
|
|
6
28
|
|
|
7
29
|
liburing-2.2 release
|
|
8
30
|
|
data/vendor/liburing/Makefile
CHANGED
|
@@ -25,7 +25,7 @@ runtests-parallel: all
|
|
|
25
25
|
@$(MAKE) -C test runtests-parallel
|
|
26
26
|
|
|
27
27
|
config-host.mak: configure
|
|
28
|
-
|
|
28
|
+
+@if [ ! -e "$@" ]; then \
|
|
29
29
|
echo "Running configure ..."; \
|
|
30
30
|
./configure; \
|
|
31
31
|
else \
|
|
@@ -45,13 +45,14 @@ endif
|
|
|
45
45
|
-e "s%@VERSION@%$(VERSION)%g" \
|
|
46
46
|
$< >$@
|
|
47
47
|
|
|
48
|
-
install: $(NAME).pc
|
|
48
|
+
install: $(NAME).pc $(NAME)-ffi.pc
|
|
49
49
|
@$(MAKE) -C src install prefix=$(DESTDIR)$(prefix) \
|
|
50
50
|
includedir=$(DESTDIR)$(includedir) \
|
|
51
51
|
libdir=$(DESTDIR)$(libdir) \
|
|
52
52
|
libdevdir=$(DESTDIR)$(libdevdir) \
|
|
53
53
|
relativelibdir=$(relativelibdir)
|
|
54
54
|
$(INSTALL) -D -m 644 $(NAME).pc $(DESTDIR)$(libdevdir)/pkgconfig/$(NAME).pc
|
|
55
|
+
$(INSTALL) -D -m 644 $(NAME)-ffi.pc $(DESTDIR)$(libdevdir)/pkgconfig/$(NAME)-ffi.pc
|
|
55
56
|
$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man2
|
|
56
57
|
$(INSTALL) -m 644 man/*.2 $(DESTDIR)$(mandir)/man2
|
|
57
58
|
$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man3
|
|
@@ -63,7 +64,7 @@ install-tests:
|
|
|
63
64
|
@$(MAKE) -C test install prefix=$(DESTDIR)$(prefix) datadir=$(DESTDIR)$(datadir)
|
|
64
65
|
|
|
65
66
|
clean:
|
|
66
|
-
@rm -f config-host.mak config-host.h cscope.out $(NAME).pc test/*.dmesg
|
|
67
|
+
@rm -f config-host.mak config-host.h cscope.out $(NAME).pc $(NAME)-ffi.pc test/*.dmesg
|
|
67
68
|
@$(MAKE) -C src clean
|
|
68
69
|
@$(MAKE) -C test clean
|
|
69
70
|
@$(MAKE) -C examples clean
|
data/vendor/liburing/README
CHANGED
|
@@ -47,6 +47,54 @@ the kernel io_uring support. Please note that this suite isn't expected to
|
|
|
47
47
|
pass on older kernels, and may even crash or hang older kernels!
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
Building liburing
|
|
51
|
+
-----------------
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Prepare build config (optional).
|
|
55
|
+
#
|
|
56
|
+
# --cc specifies the C compiler.
|
|
57
|
+
# --cxx speficies the C++ compiler.
|
|
58
|
+
#
|
|
59
|
+
./configure --cc=gcc --cxx=g++;
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# Build liburing.
|
|
63
|
+
#
|
|
64
|
+
make -j$(nproc);
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Install liburing (headers, shared/static libs, and manpage).
|
|
68
|
+
#
|
|
69
|
+
sudo make install;
|
|
70
|
+
|
|
71
|
+
See './configure --help' for more information about build config options.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
FFI support
|
|
75
|
+
-----------
|
|
76
|
+
|
|
77
|
+
By default, the build results in 4 lib files:
|
|
78
|
+
|
|
79
|
+
2 shared libs:
|
|
80
|
+
|
|
81
|
+
liburing.so
|
|
82
|
+
liburing-ffi.so
|
|
83
|
+
|
|
84
|
+
2 static libs:
|
|
85
|
+
|
|
86
|
+
liburing.a
|
|
87
|
+
liburing-ffi.a
|
|
88
|
+
|
|
89
|
+
Languages and applications that can't use 'static inline' functions in
|
|
90
|
+
liburing.h should use the FFI variants.
|
|
91
|
+
|
|
92
|
+
liburing's main public interface lives in liburing.h as 'static inline'
|
|
93
|
+
functions. Users wishing to consume liburing purely as a binary dependency
|
|
94
|
+
should link against liburing-ffi. It contains definitions for every 'static
|
|
95
|
+
inline' function.
|
|
96
|
+
|
|
97
|
+
|
|
50
98
|
License
|
|
51
99
|
-------
|
|
52
100
|
|