polyphony 0.98 → 0.99.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -1
- data/.rubocop.yml +3 -3
- data/.yardopts +30 -0
- data/CHANGELOG.md +11 -0
- data/LICENSE +1 -1
- data/README.md +63 -29
- data/Rakefile +1 -5
- data/TODO.md +0 -4
- data/docs/{main-concepts/concurrency.md → concurrency.md} +2 -9
- data/docs/{main-concepts/design-principles.md → design-principles.md} +3 -9
- data/docs/{main-concepts/exception-handling.md → exception-handling.md} +2 -9
- data/docs/{main-concepts/extending.md → extending.md} +2 -9
- data/docs/faq.md +3 -16
- data/docs/{main-concepts/fiber-scheduling.md → fiber-scheduling.md} +1 -9
- data/docs/link_rewriter.rb +16 -0
- data/docs/{getting-started/overview.md → overview.md} +1 -30
- data/docs/{getting-started/tutorial.md → tutorial.md} +3 -28
- data/docs/{_posts/2020-07-26-polyphony-0.44.md → whats-new.md} +3 -1
- data/examples/adapters/redis_client.rb +3 -2
- data/examples/io/echo_server.rb +1 -1
- data/examples/io/echo_server_plain_ruby.rb +26 -0
- data/examples/io/https_server_sni_2.rb +14 -8
- data/ext/polyphony/backend_io_uring.c +154 -9
- data/ext/polyphony/backend_io_uring_context.c +21 -12
- data/ext/polyphony/backend_io_uring_context.h +12 -7
- data/ext/polyphony/backend_libev.c +1 -1
- data/ext/polyphony/extconf.rb +25 -8
- data/ext/polyphony/fiber.c +79 -2
- data/ext/polyphony/io_extensions.c +53 -0
- data/ext/polyphony/libev.h +0 -2
- data/ext/polyphony/pipe.c +42 -2
- data/ext/polyphony/polyphony.c +345 -31
- data/ext/polyphony/polyphony.h +9 -2
- data/ext/polyphony/queue.c +181 -0
- data/ext/polyphony/ring_buffer.c +0 -1
- data/ext/polyphony/runqueue.c +8 -1
- data/ext/polyphony/runqueue_ring_buffer.c +13 -0
- data/ext/polyphony/runqueue_ring_buffer.h +2 -1
- data/ext/polyphony/socket_extensions.c +6 -0
- data/ext/polyphony/thread.c +34 -2
- data/lib/polyphony/adapters/process.rb +11 -1
- data/lib/polyphony/adapters/sequel.rb +1 -1
- data/lib/polyphony/core/channel.rb +2 -0
- data/lib/polyphony/core/debug.rb +1 -1
- data/lib/polyphony/core/global_api.rb +25 -24
- data/lib/polyphony/core/resource_pool.rb +7 -6
- data/lib/polyphony/core/sync.rb +55 -2
- data/lib/polyphony/core/thread_pool.rb +3 -3
- data/lib/polyphony/core/timer.rb +8 -8
- data/lib/polyphony/extensions/exception.rb +2 -0
- data/lib/polyphony/extensions/fiber.rb +15 -13
- data/lib/polyphony/extensions/io.rb +161 -16
- data/lib/polyphony/extensions/kernel.rb +20 -2
- data/lib/polyphony/extensions/openssl.rb +101 -12
- data/lib/polyphony/extensions/pipe.rb +103 -7
- data/lib/polyphony/extensions/process.rb +13 -1
- data/lib/polyphony/extensions/socket.rb +93 -27
- data/lib/polyphony/extensions/thread.rb +9 -1
- data/lib/polyphony/extensions/timeout.rb +1 -1
- data/lib/polyphony/version.rb +2 -1
- data/lib/polyphony.rb +27 -7
- data/polyphony.gemspec +1 -8
- data/test/stress.rb +1 -1
- data/test/test_global_api.rb +45 -7
- data/test/test_io.rb +6 -7
- data/test/test_socket.rb +157 -0
- data/test/test_sync.rb +42 -1
- data/test/test_timer.rb +5 -5
- 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 +57 -44
- data/docs/_config.yml +0 -64
- data/docs/_includes/head.html +0 -40
- data/docs/_includes/title.html +0 -1
- data/docs/_sass/custom/custom.scss +0 -10
- data/docs/_sass/overrides.scss +0 -0
- data/docs/api-reference/exception.md +0 -31
- data/docs/api-reference/fiber.md +0 -425
- data/docs/api-reference/index.md +0 -9
- data/docs/api-reference/io.md +0 -36
- data/docs/api-reference/object.md +0 -99
- data/docs/api-reference/polyphony-baseexception.md +0 -33
- data/docs/api-reference/polyphony-cancel.md +0 -26
- data/docs/api-reference/polyphony-moveon.md +0 -24
- data/docs/api-reference/polyphony-net.md +0 -20
- data/docs/api-reference/polyphony-process.md +0 -28
- data/docs/api-reference/polyphony-resourcepool.md +0 -59
- data/docs/api-reference/polyphony-restart.md +0 -18
- data/docs/api-reference/polyphony-terminate.md +0 -18
- data/docs/api-reference/polyphony-threadpool.md +0 -67
- data/docs/api-reference/polyphony-throttler.md +0 -77
- data/docs/api-reference/polyphony.md +0 -36
- data/docs/api-reference/thread.md +0 -88
- data/docs/favicon.ico +0 -0
- data/docs/getting-started/index.md +0 -10
- data/docs/getting-started/installing.md +0 -34
- 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
- /data/{docs/assets/img → assets}/echo-fibers.svg +0 -0
- /data/{docs → assets}/polyphony-logo.png +0 -0
- /data/{docs/assets/img → assets}/sleeping-fiber.svg +0 -0
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
|
|
19
19
|
if (argc > 1)
|
20
20
|
return T_EXIT_SKIP;
|
21
21
|
|
22
|
-
mmap((void *) 0x20000000, 0x1000000, 3,
|
22
|
+
mmap((void *) 0x20000000, 0x1000000, 3, MAP_ANON|MAP_PRIVATE, -1, 0);
|
23
23
|
|
24
24
|
*(uint32_t*)0x20000000 = 0;
|
25
25
|
*(uint32_t*)0x20000004 = 0;
|
@@ -13,7 +13,8 @@ override CPPFLAGS += \
|
|
13
13
|
-D_GNU_SOURCE \
|
14
14
|
-D__SANE_USERSPACE_TYPES__ \
|
15
15
|
-I../src/include/ \
|
16
|
-
-include ../config-host.h
|
16
|
+
-include ../config-host.h \
|
17
|
+
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
|
17
18
|
|
18
19
|
CFLAGS ?= -g -O3 -Wall -Wextra
|
19
20
|
XCFLAGS = -Wno-unused-parameter -Wno-sign-compare
|
@@ -67,10 +68,12 @@ test_srcs := \
|
|
67
68
|
drop-submit.c \
|
68
69
|
eeed8b54e0df.c \
|
69
70
|
empty-eownerdead.c \
|
71
|
+
eploop.c \
|
70
72
|
eventfd.c \
|
71
73
|
eventfd-disable.c \
|
72
74
|
eventfd-reg.c \
|
73
75
|
eventfd-ring.c \
|
76
|
+
evloop.c \
|
74
77
|
exec-target.c \
|
75
78
|
exit-no-cleanup.c \
|
76
79
|
fadvise.c \
|
@@ -86,11 +89,13 @@ test_srcs := \
|
|
86
89
|
fixed-link.c \
|
87
90
|
fixed-reuse.c \
|
88
91
|
fpos.c \
|
92
|
+
fsnotify.c \
|
89
93
|
fsync.c \
|
90
94
|
hardlink.c \
|
91
95
|
io-cancel.c \
|
92
96
|
iopoll.c \
|
93
97
|
iopoll-leak.c \
|
98
|
+
iopoll-overflow.c \
|
94
99
|
io_uring_enter.c \
|
95
100
|
io_uring_passthrough.c \
|
96
101
|
io_uring_register.c \
|
@@ -103,6 +108,8 @@ test_srcs := \
|
|
103
108
|
madvise.c \
|
104
109
|
mkdir.c \
|
105
110
|
msg-ring.c \
|
111
|
+
msg-ring-flags.c \
|
112
|
+
msg-ring-overflow.c \
|
106
113
|
multicqes_drain.c \
|
107
114
|
nolibc.c \
|
108
115
|
nop-all-sizes.c \
|
@@ -112,6 +119,7 @@ test_srcs := \
|
|
112
119
|
open-direct-link.c \
|
113
120
|
open-direct-pick.c \
|
114
121
|
personality.c \
|
122
|
+
pipe-bug.c \
|
115
123
|
pipe-eof.c \
|
116
124
|
pipe-reuse.c \
|
117
125
|
poll.c \
|
@@ -120,8 +128,10 @@ test_srcs := \
|
|
120
128
|
poll-cancel-ton.c \
|
121
129
|
poll-link.c \
|
122
130
|
poll-many.c \
|
123
|
-
poll-mshot-update.c \
|
124
131
|
poll-mshot-overflow.c \
|
132
|
+
poll-mshot-update.c \
|
133
|
+
poll-race.c \
|
134
|
+
poll-race-mshot.c \
|
125
135
|
poll-ring.c \
|
126
136
|
poll-v-poll.c \
|
127
137
|
pollfree.c \
|
@@ -131,6 +141,7 @@ test_srcs := \
|
|
131
141
|
recv-msgall.c \
|
132
142
|
recv-msgall-stream.c \
|
133
143
|
recv-multishot.c \
|
144
|
+
reg-reg-ring.c \
|
134
145
|
register-restrictions.c \
|
135
146
|
rename.c \
|
136
147
|
ringbuf-read.c \
|
@@ -142,10 +153,12 @@ test_srcs := \
|
|
142
153
|
sendmsg_fs_cve.c \
|
143
154
|
send_recv.c \
|
144
155
|
send_recvmsg.c \
|
156
|
+
send-zerocopy.c \
|
145
157
|
shared-wq.c \
|
146
158
|
short-read.c \
|
147
159
|
shutdown.c \
|
148
160
|
sigfd-deadlock.c \
|
161
|
+
single-issuer.c \
|
149
162
|
skip-cqe.c \
|
150
163
|
socket.c \
|
151
164
|
socket-rw.c \
|
@@ -166,8 +179,8 @@ test_srcs := \
|
|
166
179
|
submit-and-wait.c \
|
167
180
|
submit-link-fail.c \
|
168
181
|
submit-reuse.c \
|
169
|
-
sync-cancel.c \
|
170
182
|
symlink.c \
|
183
|
+
sync-cancel.c \
|
171
184
|
teardowns.c \
|
172
185
|
thread-exit.c \
|
173
186
|
timeout.c \
|
@@ -175,11 +188,9 @@ test_srcs := \
|
|
175
188
|
timeout-overflow.c \
|
176
189
|
tty-write-dpoll.c \
|
177
190
|
unlink.c \
|
191
|
+
version.c \
|
178
192
|
wakeup-hang.c \
|
179
193
|
xattr.c \
|
180
|
-
skip-cqe.c \
|
181
|
-
single-issuer.c \
|
182
|
-
send-zerocopy.c \
|
183
194
|
# EOL
|
184
195
|
|
185
196
|
all_targets :=
|
@@ -213,8 +224,17 @@ helpers.o: helpers.c
|
|
213
224
|
%.t: %.c $(helpers) helpers.h ../src/liburing.a
|
214
225
|
$(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< $(helpers) $(LDFLAGS)
|
215
226
|
|
227
|
+
#
|
228
|
+
# Clang++ is not happy with -Wmissing-prototypes:
|
229
|
+
#
|
230
|
+
# cc1plus: warning: command-line option '-Wmissing-prototypes' \
|
231
|
+
# is valid for C/ObjC but not for C++
|
232
|
+
#
|
216
233
|
%.t: %.cc $(helpers) helpers.h ../src/liburing.a
|
217
|
-
$(QUIET_CXX)$(CXX)
|
234
|
+
$(QUIET_CXX)$(CXX) \
|
235
|
+
$(patsubst -Wmissing-prototypes,,$(CPPFLAGS)) \
|
236
|
+
$(patsubst -Wmissing-prototypes,,$(CXXFLAGS)) \
|
237
|
+
-o $@ $< $(helpers) $(LDFLAGS)
|
218
238
|
|
219
239
|
|
220
240
|
install: $(test_targets) runtests.sh runtests-loop.sh
|
@@ -14,13 +14,13 @@
|
|
14
14
|
#include "helpers.h"
|
15
15
|
#include "../src/syscall.h"
|
16
16
|
|
17
|
-
uint64_t r[1] = {0xffffffffffffffff};
|
17
|
+
static uint64_t r[1] = {0xffffffffffffffff};
|
18
18
|
|
19
19
|
int main(int argc, char *argv[])
|
20
20
|
{
|
21
21
|
if (argc > 1)
|
22
22
|
return T_EXIT_SKIP;
|
23
|
-
mmap((void *) 0x20000000, 0x1000000, 3,
|
23
|
+
mmap((void *) 0x20000000, 0x1000000, 3, MAP_ANON|MAP_PRIVATE, -1, 0);
|
24
24
|
intptr_t res = 0;
|
25
25
|
*(uint32_t*)0x20000080 = 0;
|
26
26
|
*(uint32_t*)0x20000084 = 0;
|
@@ -95,7 +95,7 @@ static void kill_and_wait(int pid, int* status)
|
|
95
95
|
}
|
96
96
|
}
|
97
97
|
|
98
|
-
static void setup_test()
|
98
|
+
static void setup_test(void)
|
99
99
|
{
|
100
100
|
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
|
101
101
|
setpgrp();
|
@@ -175,7 +175,7 @@ int main(int argc, char *argv[])
|
|
175
175
|
if (argc > 1)
|
176
176
|
return T_EXIT_SKIP;
|
177
177
|
signal(SIGINT, sig_int);
|
178
|
-
mmap((void *) 0x20000000, 0x1000000, 3,
|
178
|
+
mmap((void *) 0x20000000, 0x1000000, 3, MAP_ANON|MAP_PRIVATE, -1, 0);
|
179
179
|
loop();
|
180
180
|
return T_EXIT_PASS;
|
181
181
|
}
|
@@ -16,8 +16,8 @@
|
|
16
16
|
#include "liburing.h"
|
17
17
|
#include "helpers.h"
|
18
18
|
|
19
|
-
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
20
|
-
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
19
|
+
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
20
|
+
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
21
21
|
|
22
22
|
static int recv_thread_ready = 0;
|
23
23
|
static int recv_thread_done = 0;
|
@@ -77,7 +77,7 @@ static void *send_thread(void *arg)
|
|
77
77
|
return NULL;
|
78
78
|
}
|
79
79
|
|
80
|
-
void *recv_thread(void *arg)
|
80
|
+
static void *recv_thread(void *arg)
|
81
81
|
{
|
82
82
|
struct data *data = arg;
|
83
83
|
struct io_uring ring;
|
@@ -195,7 +195,7 @@ static int test_accept_timeout(int do_connect, unsigned long timeout)
|
|
195
195
|
if (ret) {
|
196
196
|
fprintf(stderr, "queue_init: %d\n", ret);
|
197
197
|
return 1;
|
198
|
-
}
|
198
|
+
}
|
199
199
|
|
200
200
|
fast_poll = (p.features & IORING_FEAT_FAST_POLL) != 0;
|
201
201
|
io_uring_queue_exit(&ring);
|
@@ -1,5 +1,4 @@
|
|
1
1
|
/* SPDX-License-Identifier: MIT */
|
2
|
-
#include <liburing.h>
|
3
2
|
#include <netdb.h>
|
4
3
|
#include <string.h>
|
5
4
|
#include <sys/socket.h>
|
@@ -11,17 +10,16 @@
|
|
11
10
|
#include "helpers.h"
|
12
11
|
#include "../src/syscall.h"
|
13
12
|
|
14
|
-
struct io_uring io_uring;
|
13
|
+
static struct io_uring io_uring;
|
15
14
|
|
16
|
-
int sys_io_uring_enter(const int fd,
|
17
|
-
|
18
|
-
|
19
|
-
const unsigned flags, sigset_t * const sig)
|
15
|
+
static int sys_io_uring_enter(const int fd, const unsigned to_submit,
|
16
|
+
const unsigned min_complete,
|
17
|
+
const unsigned flags, sigset_t * const sig)
|
20
18
|
{
|
21
19
|
return __sys_io_uring_enter(fd, to_submit, min_complete, flags, sig);
|
22
20
|
}
|
23
21
|
|
24
|
-
int submit_sqe(void)
|
22
|
+
static int submit_sqe(void)
|
25
23
|
{
|
26
24
|
struct io_uring_sq *sq = &io_uring.sq;
|
27
25
|
const unsigned tail = *sq->ktail;
|
@@ -272,6 +272,7 @@ static int test_loop(struct io_uring *ring,
|
|
272
272
|
uint32_t multishot_mask = 0;
|
273
273
|
int nr_fds = multishot ? MAX_FDS : 1;
|
274
274
|
int multishot_idx = multishot ? INITIAL_USER_DATA : 0;
|
275
|
+
int err_ret = T_EXIT_FAIL;
|
275
276
|
|
276
277
|
if (args.overflow)
|
277
278
|
cause_overflow(ring);
|
@@ -298,6 +299,7 @@ static int test_loop(struct io_uring *ring,
|
|
298
299
|
no_accept_multi = 1;
|
299
300
|
else
|
300
301
|
no_accept = 1;
|
302
|
+
ret = T_EXIT_SKIP;
|
301
303
|
goto out;
|
302
304
|
} else if (s_fd[i] < 0) {
|
303
305
|
if (args.accept_should_error &&
|
@@ -360,10 +362,10 @@ static int test_loop(struct io_uring *ring,
|
|
360
362
|
|
361
363
|
out:
|
362
364
|
close_sock_fds(s_fd, c_fd, nr_fds, fixed);
|
363
|
-
return
|
365
|
+
return T_EXIT_PASS;
|
364
366
|
err:
|
365
367
|
close_sock_fds(s_fd, c_fd, nr_fds, fixed);
|
366
|
-
return
|
368
|
+
return err_ret;
|
367
369
|
}
|
368
370
|
|
369
371
|
static int test(struct io_uring *ring, struct accept_test_args args)
|
@@ -372,7 +374,7 @@ static int test(struct io_uring *ring, struct accept_test_args args)
|
|
372
374
|
int ret = 0;
|
373
375
|
int loop;
|
374
376
|
int32_t recv_s0 = start_accept_listen(&addr, 0,
|
375
|
-
args.nonblock ?
|
377
|
+
args.nonblock ? SOCK_NONBLOCK : 0);
|
376
378
|
if (args.queue_accept_before_connect)
|
377
379
|
queue_accept_conn(ring, recv_s0, args);
|
378
380
|
for (loop = 0; loop < 1 + args.extra_loops; loop++) {
|
@@ -458,7 +460,7 @@ static int test_accept_many(struct test_accept_many_args args)
|
|
458
460
|
|
459
461
|
for (i = 0; i < nr_socks; i++)
|
460
462
|
fds[i] = start_accept_listen(NULL, i,
|
461
|
-
args.nonblock ?
|
463
|
+
args.nonblock ? SOCK_NONBLOCK : 0);
|
462
464
|
|
463
465
|
for (i = 0; i < nr; i++) {
|
464
466
|
int sock_idx = args.single_sock ? 0 : i;
|
@@ -611,7 +613,7 @@ static int test_multishot_accept(int count, bool before, bool overflow)
|
|
611
613
|
return ret;
|
612
614
|
}
|
613
615
|
|
614
|
-
static int test_accept_multishot_wrong_arg()
|
616
|
+
static int test_accept_multishot_wrong_arg(void)
|
615
617
|
{
|
616
618
|
struct io_uring m_io_uring;
|
617
619
|
struct io_uring_cqe *cqe;
|
@@ -733,8 +735,9 @@ int main(int argc, char *argv[])
|
|
733
735
|
|
734
736
|
if (argc > 1)
|
735
737
|
return T_EXIT_SKIP;
|
738
|
+
|
736
739
|
ret = test_accept(1, false);
|
737
|
-
if (ret) {
|
740
|
+
if (ret == T_EXIT_FAIL) {
|
738
741
|
fprintf(stderr, "test_accept failed\n");
|
739
742
|
return ret;
|
740
743
|
}
|
@@ -742,141 +745,141 @@ int main(int argc, char *argv[])
|
|
742
745
|
return T_EXIT_SKIP;
|
743
746
|
|
744
747
|
ret = test_accept(2, false);
|
745
|
-
if (ret) {
|
748
|
+
if (ret == T_EXIT_FAIL) {
|
746
749
|
fprintf(stderr, "test_accept(2) failed\n");
|
747
750
|
return ret;
|
748
751
|
}
|
749
752
|
|
750
753
|
ret = test_accept(2, true);
|
751
|
-
if (ret) {
|
754
|
+
if (ret == T_EXIT_FAIL) {
|
752
755
|
fprintf(stderr, "test_accept(2, true) failed\n");
|
753
756
|
return ret;
|
754
757
|
}
|
755
758
|
|
756
759
|
ret = test_accept_nonblock(false, 1);
|
757
|
-
if (ret) {
|
760
|
+
if (ret == T_EXIT_FAIL) {
|
758
761
|
fprintf(stderr, "test_accept_nonblock failed\n");
|
759
762
|
return ret;
|
760
763
|
}
|
761
764
|
|
762
765
|
ret = test_accept_nonblock(true, 1);
|
763
|
-
if (ret) {
|
766
|
+
if (ret == T_EXIT_FAIL) {
|
764
767
|
fprintf(stderr, "test_accept_nonblock(before, 1) failed\n");
|
765
768
|
return ret;
|
766
769
|
}
|
767
770
|
|
768
771
|
ret = test_accept_nonblock(true, 3);
|
769
|
-
if (ret) {
|
772
|
+
if (ret == T_EXIT_FAIL) {
|
770
773
|
fprintf(stderr, "test_accept_nonblock(before,3) failed\n");
|
771
774
|
return ret;
|
772
775
|
}
|
773
776
|
|
774
777
|
ret = test_accept_fixed();
|
775
|
-
if (ret) {
|
778
|
+
if (ret == T_EXIT_FAIL) {
|
776
779
|
fprintf(stderr, "test_accept_fixed failed\n");
|
777
780
|
return ret;
|
778
781
|
}
|
779
782
|
|
780
783
|
ret = test_multishot_fixed_accept();
|
781
|
-
if (ret) {
|
784
|
+
if (ret == T_EXIT_FAIL) {
|
782
785
|
fprintf(stderr, "test_multishot_fixed_accept failed\n");
|
783
786
|
return ret;
|
784
787
|
}
|
785
788
|
|
786
789
|
ret = test_accept_multishot_wrong_arg();
|
787
|
-
if (ret) {
|
790
|
+
if (ret == T_EXIT_FAIL) {
|
788
791
|
fprintf(stderr, "test_accept_multishot_wrong_arg failed\n");
|
789
792
|
return ret;
|
790
793
|
}
|
791
794
|
|
792
795
|
ret = test_accept_sqpoll();
|
793
|
-
if (ret) {
|
796
|
+
if (ret == T_EXIT_FAIL) {
|
794
797
|
fprintf(stderr, "test_accept_sqpoll failed\n");
|
795
798
|
return ret;
|
796
799
|
}
|
797
800
|
|
798
801
|
ret = test_accept_cancel(0, 1, false);
|
799
|
-
if (ret) {
|
802
|
+
if (ret == T_EXIT_FAIL) {
|
800
803
|
fprintf(stderr, "test_accept_cancel nodelay failed\n");
|
801
804
|
return ret;
|
802
805
|
}
|
803
806
|
|
804
807
|
ret = test_accept_cancel(10000, 1, false);
|
805
|
-
if (ret) {
|
808
|
+
if (ret == T_EXIT_FAIL) {
|
806
809
|
fprintf(stderr, "test_accept_cancel delay failed\n");
|
807
810
|
return ret;
|
808
811
|
}
|
809
812
|
|
810
813
|
ret = test_accept_cancel(0, 4, false);
|
811
|
-
if (ret) {
|
814
|
+
if (ret == T_EXIT_FAIL) {
|
812
815
|
fprintf(stderr, "test_accept_cancel nodelay failed\n");
|
813
816
|
return ret;
|
814
817
|
}
|
815
818
|
|
816
819
|
ret = test_accept_cancel(10000, 4, false);
|
817
|
-
if (ret) {
|
820
|
+
if (ret == T_EXIT_FAIL) {
|
818
821
|
fprintf(stderr, "test_accept_cancel delay failed\n");
|
819
822
|
return ret;
|
820
823
|
}
|
821
824
|
|
822
825
|
ret = test_accept_cancel(0, 1, true);
|
823
|
-
if (ret) {
|
826
|
+
if (ret == T_EXIT_FAIL) {
|
824
827
|
fprintf(stderr, "test_accept_cancel multishot nodelay failed\n");
|
825
828
|
return ret;
|
826
829
|
}
|
827
830
|
|
828
831
|
ret = test_accept_cancel(10000, 1, true);
|
829
|
-
if (ret) {
|
832
|
+
if (ret == T_EXIT_FAIL) {
|
830
833
|
fprintf(stderr, "test_accept_cancel multishot delay failed\n");
|
831
834
|
return ret;
|
832
835
|
}
|
833
836
|
|
834
837
|
ret = test_accept_cancel(0, 4, true);
|
835
|
-
if (ret) {
|
838
|
+
if (ret == T_EXIT_FAIL) {
|
836
839
|
fprintf(stderr, "test_accept_cancel multishot nodelay failed\n");
|
837
840
|
return ret;
|
838
841
|
}
|
839
842
|
|
840
843
|
ret = test_accept_cancel(10000, 4, true);
|
841
|
-
if (ret) {
|
844
|
+
if (ret == T_EXIT_FAIL) {
|
842
845
|
fprintf(stderr, "test_accept_cancel multishot delay failed\n");
|
843
846
|
return ret;
|
844
847
|
}
|
845
848
|
|
846
849
|
ret = test_multishot_accept(1, true, true);
|
847
|
-
if (ret) {
|
850
|
+
if (ret == T_EXIT_FAIL) {
|
848
851
|
fprintf(stderr, "test_multishot_accept(1, false, true) failed\n");
|
849
852
|
return ret;
|
850
853
|
}
|
851
854
|
|
852
855
|
ret = test_multishot_accept(1, false, false);
|
853
|
-
if (ret) {
|
856
|
+
if (ret == T_EXIT_FAIL) {
|
854
857
|
fprintf(stderr, "test_multishot_accept(1, false, false) failed\n");
|
855
858
|
return ret;
|
856
859
|
}
|
857
860
|
|
858
861
|
ret = test_multishot_accept(1, true, false);
|
859
|
-
if (ret) {
|
862
|
+
if (ret == T_EXIT_FAIL) {
|
860
863
|
fprintf(stderr, "test_multishot_accept(1, true, false) failed\n");
|
861
864
|
return ret;
|
862
865
|
}
|
863
866
|
|
864
867
|
ret = test_accept_many((struct test_accept_many_args) {});
|
865
|
-
if (ret) {
|
868
|
+
if (ret == T_EXIT_FAIL) {
|
866
869
|
fprintf(stderr, "test_accept_many failed\n");
|
867
870
|
return ret;
|
868
871
|
}
|
869
872
|
|
870
873
|
ret = test_accept_many((struct test_accept_many_args) {
|
871
874
|
.usecs = 100000 });
|
872
|
-
if (ret) {
|
875
|
+
if (ret == T_EXIT_FAIL) {
|
873
876
|
fprintf(stderr, "test_accept_many(sleep) failed\n");
|
874
877
|
return ret;
|
875
878
|
}
|
876
879
|
|
877
880
|
ret = test_accept_many((struct test_accept_many_args) {
|
878
881
|
.nonblock = true });
|
879
|
-
if (ret) {
|
882
|
+
if (ret == T_EXIT_FAIL) {
|
880
883
|
fprintf(stderr, "test_accept_many(nonblock) failed\n");
|
881
884
|
return ret;
|
882
885
|
}
|
@@ -885,13 +888,13 @@ int main(int argc, char *argv[])
|
|
885
888
|
.nonblock = true,
|
886
889
|
.single_sock = true,
|
887
890
|
.close_fds = true });
|
888
|
-
if (ret) {
|
891
|
+
if (ret == T_EXIT_FAIL) {
|
889
892
|
fprintf(stderr, "test_accept_many(nonblock,close) failed\n");
|
890
893
|
return ret;
|
891
894
|
}
|
892
895
|
|
893
896
|
ret = test_accept_pending_on_exit();
|
894
|
-
if (ret) {
|
897
|
+
if (ret == T_EXIT_FAIL) {
|
895
898
|
fprintf(stderr, "test_accept_pending_on_exit failed\n");
|
896
899
|
return ret;
|
897
900
|
}
|
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
|
|
19
19
|
if (argc > 1)
|
20
20
|
return T_EXIT_SKIP;
|
21
21
|
|
22
|
-
mmap((void *) 0x20000000, 0x1000000, 3,
|
22
|
+
mmap((void *) 0x20000000, 0x1000000, 3, MAP_ANON|MAP_PRIVATE, -1, 0);
|
23
23
|
|
24
24
|
*(uint32_t*)0x20000200 = 0;
|
25
25
|
*(uint32_t*)0x20000204 = 0;
|
@@ -9,11 +9,13 @@
|
|
9
9
|
#include <stdlib.h>
|
10
10
|
#include <string.h>
|
11
11
|
#include <fcntl.h>
|
12
|
+
#include <sys/mman.h>
|
12
13
|
|
13
14
|
#include "liburing.h"
|
14
15
|
#include "helpers.h"
|
15
16
|
|
16
17
|
static int no_buf_ring;
|
18
|
+
static int pagesize;
|
17
19
|
|
18
20
|
/* test trying to register classic group when ring group exists */
|
19
21
|
static int test_mixed_reg2(int bgid)
|
@@ -31,7 +33,7 @@ static int test_mixed_reg2(int bgid)
|
|
31
33
|
else if (ret != T_SETUP_OK)
|
32
34
|
return 1;
|
33
35
|
|
34
|
-
if (posix_memalign(&ptr, 4096,
|
36
|
+
if (posix_memalign(&ptr, 4096, 32 * sizeof(struct io_uring_buf)))
|
35
37
|
return 1;
|
36
38
|
|
37
39
|
reg.ring_addr = (unsigned long) ptr;
|
@@ -96,7 +98,7 @@ static int test_mixed_reg(int bgid)
|
|
96
98
|
}
|
97
99
|
io_uring_cqe_seen(&ring, cqe);
|
98
100
|
|
99
|
-
if (posix_memalign(&ptr, 4096,
|
101
|
+
if (posix_memalign(&ptr, 4096, 32 * sizeof(struct io_uring_buf)))
|
100
102
|
return 1;
|
101
103
|
|
102
104
|
reg.ring_addr = (unsigned long) ptr;
|
@@ -126,7 +128,7 @@ static int test_double_reg_unreg(int bgid)
|
|
126
128
|
else if (ret != T_SETUP_OK)
|
127
129
|
return 1;
|
128
130
|
|
129
|
-
if (posix_memalign(&ptr, 4096,
|
131
|
+
if (posix_memalign(&ptr, 4096, 32 * sizeof(struct io_uring_buf)))
|
130
132
|
return 1;
|
131
133
|
|
132
134
|
reg.ring_addr = (unsigned long) ptr;
|
@@ -179,7 +181,7 @@ static int test_reg_unreg(int bgid)
|
|
179
181
|
else if (ret != T_SETUP_OK)
|
180
182
|
return 1;
|
181
183
|
|
182
|
-
if (posix_memalign(&ptr, 4096,
|
184
|
+
if (posix_memalign(&ptr, 4096, 32 * sizeof(struct io_uring_buf)))
|
183
185
|
return 1;
|
184
186
|
|
185
187
|
reg.ring_addr = (unsigned long) ptr;
|
@@ -230,6 +232,50 @@ static int test_bad_reg(int bgid)
|
|
230
232
|
return !ret;
|
231
233
|
}
|
232
234
|
|
235
|
+
static int test_full_page_reg(int bgid)
|
236
|
+
{
|
237
|
+
struct io_uring ring;
|
238
|
+
int ret;
|
239
|
+
void *ptr;
|
240
|
+
struct io_uring_buf_reg reg = { };
|
241
|
+
int entries = pagesize / sizeof(struct io_uring_buf);
|
242
|
+
|
243
|
+
ret = io_uring_queue_init(1, &ring, 0);
|
244
|
+
if (ret) {
|
245
|
+
fprintf(stderr, "queue init failed %d\n", ret);
|
246
|
+
return 1;
|
247
|
+
}
|
248
|
+
|
249
|
+
ret = posix_memalign(&ptr, pagesize, pagesize * 2);
|
250
|
+
if (ret) {
|
251
|
+
fprintf(stderr, "posix_memalign failed %d\n", ret);
|
252
|
+
goto err;
|
253
|
+
}
|
254
|
+
|
255
|
+
ret = mprotect(ptr + pagesize, pagesize, PROT_NONE);
|
256
|
+
if (ret) {
|
257
|
+
fprintf(stderr, "mprotect failed %d\n", errno);
|
258
|
+
goto err1;
|
259
|
+
}
|
260
|
+
|
261
|
+
reg.ring_addr = (unsigned long) ptr;
|
262
|
+
reg.ring_entries = entries;
|
263
|
+
reg.bgid = bgid;
|
264
|
+
|
265
|
+
ret = io_uring_register_buf_ring(&ring, ®, 0);
|
266
|
+
if (ret)
|
267
|
+
fprintf(stderr, "register buf ring failed %d\n", ret);
|
268
|
+
|
269
|
+
if (mprotect(ptr + pagesize, pagesize, PROT_READ | PROT_WRITE))
|
270
|
+
fprintf(stderr, "reverting mprotect failed %d\n", errno);
|
271
|
+
|
272
|
+
err1:
|
273
|
+
free(ptr);
|
274
|
+
err:
|
275
|
+
io_uring_queue_exit(&ring);
|
276
|
+
return ret;
|
277
|
+
}
|
278
|
+
|
233
279
|
static int test_one_read(int fd, int bgid, struct io_uring *ring)
|
234
280
|
{
|
235
281
|
int ret;
|
@@ -374,6 +420,8 @@ int main(int argc, char *argv[])
|
|
374
420
|
if (argc > 1)
|
375
421
|
return T_EXIT_SKIP;
|
376
422
|
|
423
|
+
pagesize = getpagesize();
|
424
|
+
|
377
425
|
for (i = 0; bgids[i] != -1; i++) {
|
378
426
|
ret = test_reg_unreg(bgids[i]);
|
379
427
|
if (ret) {
|
@@ -406,6 +454,12 @@ int main(int argc, char *argv[])
|
|
406
454
|
fprintf(stderr, "test_mixed_reg2 failed\n");
|
407
455
|
return T_EXIT_FAIL;
|
408
456
|
}
|
457
|
+
|
458
|
+
ret = test_full_page_reg(bgids[i]);
|
459
|
+
if (ret) {
|
460
|
+
fprintf(stderr, "test_full_page_reg failed\n");
|
461
|
+
return T_EXIT_FAIL;
|
462
|
+
}
|
409
463
|
}
|
410
464
|
|
411
465
|
for (i = 0; !no_buf_ring && entries[i] != -1; i++) {
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
static int use_sqpoll = 0;
|
17
17
|
|
18
|
-
void notify_fd(int fd)
|
18
|
+
static void notify_fd(int fd)
|
19
19
|
{
|
20
20
|
char buf[8] = {0, 0, 0, 0, 0, 0, 1};
|
21
21
|
int ret;
|
@@ -25,7 +25,7 @@ void notify_fd(int fd)
|
|
25
25
|
perror("write");
|
26
26
|
}
|
27
27
|
|
28
|
-
void *delay_set_fd_from_thread(void *data)
|
28
|
+
static void *delay_set_fd_from_thread(void *data)
|
29
29
|
{
|
30
30
|
int fd = (intptr_t) data;
|
31
31
|
|
@@ -15,12 +15,13 @@
|
|
15
15
|
|
16
16
|
#include <errno.h>
|
17
17
|
#include <fcntl.h>
|
18
|
-
#include <liburing.h>
|
19
18
|
#include <sys/stat.h>
|
20
19
|
#include <stdio.h>
|
21
20
|
#include <string.h>
|
22
21
|
#include <unistd.h>
|
23
22
|
|
23
|
+
#include "liburing.h"
|
24
|
+
|
24
25
|
typedef struct
|
25
26
|
{
|
26
27
|
const char *const flnames;
|
@@ -15,6 +15,7 @@
|
|
15
15
|
#include <netinet/in.h>
|
16
16
|
#include <netinet/tcp.h>
|
17
17
|
#include <arpa/inet.h>
|
18
|
+
#include <sys/stat.h>
|
18
19
|
|
19
20
|
#include "liburing.h"
|
20
21
|
#include "helpers.h"
|
@@ -256,6 +257,13 @@ static int test_connect_timeout(struct io_uring *ring)
|
|
256
257
|
struct sockaddr_in addr;
|
257
258
|
struct io_uring_sqe *sqe;
|
258
259
|
struct __kernel_timespec ts = {.tv_sec = 0, .tv_nsec = 100000};
|
260
|
+
struct stat sb;
|
261
|
+
|
262
|
+
/*
|
263
|
+
* Test reliably fails if syncookies isn't enabled
|
264
|
+
*/
|
265
|
+
if (stat("/proc/sys/net/ipv4/tcp_syncookies", &sb) < 0)
|
266
|
+
return T_EXIT_SKIP;
|
259
267
|
|
260
268
|
connect_fd[0] = create_socket();
|
261
269
|
if (connect_fd[0] == -1)
|