polyphony 1.5 → 1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +14 -0
- data/TODO.md +0 -4
- data/ext/polyphony/backend_io_uring.c +34 -1
- data/ext/polyphony/backend_io_uring_context.c +24 -18
- data/ext/polyphony/backend_io_uring_context.h +4 -2
- data/ext/polyphony/backend_libev.c +4 -7
- data/ext/polyphony/event.c +21 -0
- data/ext/polyphony/extconf.rb +20 -18
- data/ext/polyphony/fiber.c +0 -2
- data/ext/polyphony/polyphony.c +2 -0
- data/ext/polyphony/polyphony.h +5 -0
- data/ext/polyphony/ring_buffer.c +1 -0
- data/ext/polyphony/runqueue_ring_buffer.c +1 -0
- data/ext/polyphony/thread.c +63 -0
- data/lib/polyphony/adapters/open3.rb +190 -0
- data/lib/polyphony/core/sync.rb +83 -13
- data/lib/polyphony/core/timer.rb +7 -25
- data/lib/polyphony/extensions/exception.rb +15 -0
- data/lib/polyphony/extensions/fiber.rb +14 -13
- data/lib/polyphony/extensions/io.rb +56 -14
- data/lib/polyphony/extensions/kernel.rb +1 -1
- data/lib/polyphony/extensions/object.rb +1 -13
- data/lib/polyphony/extensions/process.rb +76 -1
- data/lib/polyphony/extensions/thread.rb +19 -27
- data/lib/polyphony/version.rb +1 -1
- data/lib/polyphony.rb +11 -5
- data/test/helper.rb +46 -4
- data/test/open3/envutil.rb +380 -0
- data/test/open3/find_executable.rb +24 -0
- data/test/stress.rb +11 -7
- data/test/test_backend.rb +7 -2
- data/test/test_event.rb +10 -3
- data/test/test_ext.rb +2 -1
- data/test/test_fiber.rb +16 -4
- data/test/test_global_api.rb +13 -12
- data/test/test_io.rb +39 -0
- data/test/test_kernel.rb +2 -2
- data/test/test_monitor.rb +356 -0
- data/test/test_open3.rb +338 -0
- data/test/test_signal.rb +5 -1
- data/test/test_socket.rb +6 -3
- data/test/test_sync.rb +46 -0
- data/test/test_thread.rb +10 -1
- data/test/test_thread_pool.rb +5 -0
- data/test/test_throttler.rb +1 -1
- data/test/test_timer.rb +8 -2
- data/test/test_trace.rb +2 -0
- data/vendor/liburing/.github/workflows/build.yml +8 -0
- data/vendor/liburing/.gitignore +1 -0
- data/vendor/liburing/CHANGELOG +8 -0
- data/vendor/liburing/configure +17 -25
- data/vendor/liburing/debian/liburing-dev.manpages +2 -0
- data/vendor/liburing/debian/rules +2 -1
- data/vendor/liburing/examples/Makefile +2 -1
- data/vendor/liburing/examples/io_uring-udp.c +11 -3
- data/vendor/liburing/examples/rsrc-update-bench.c +100 -0
- data/vendor/liburing/liburing.spec +1 -1
- data/vendor/liburing/make-debs.sh +4 -2
- data/vendor/liburing/src/Makefile +5 -5
- data/vendor/liburing/src/arch/aarch64/lib.h +1 -1
- data/vendor/liburing/src/include/liburing/io_uring.h +41 -16
- data/vendor/liburing/src/include/liburing.h +86 -11
- data/vendor/liburing/src/int_flags.h +1 -0
- data/vendor/liburing/src/liburing-ffi.map +12 -0
- data/vendor/liburing/src/liburing.map +8 -0
- data/vendor/liburing/src/register.c +7 -2
- data/vendor/liburing/src/setup.c +373 -81
- data/vendor/liburing/test/232c93d07b74.c +3 -3
- data/vendor/liburing/test/Makefile +10 -3
- data/vendor/liburing/test/accept.c +2 -1
- data/vendor/liburing/test/buf-ring.c +35 -75
- data/vendor/liburing/test/connect-rep.c +204 -0
- data/vendor/liburing/test/coredump.c +59 -0
- data/vendor/liburing/test/fallocate.c +9 -0
- data/vendor/liburing/test/fd-pass.c +34 -3
- data/vendor/liburing/test/file-verify.c +27 -6
- data/vendor/liburing/test/helpers.c +3 -1
- data/vendor/liburing/test/io_uring_register.c +25 -28
- data/vendor/liburing/test/io_uring_setup.c +1 -1
- data/vendor/liburing/test/poll-cancel-all.c +29 -5
- data/vendor/liburing/test/poll-race-mshot.c +6 -22
- data/vendor/liburing/test/read-write.c +53 -0
- data/vendor/liburing/test/recv-msgall.c +21 -23
- data/vendor/liburing/test/reg-fd-only.c +55 -0
- data/vendor/liburing/test/reg-hint.c +56 -0
- data/vendor/liburing/test/regbuf-merge.c +91 -0
- data/vendor/liburing/test/ringbuf-read.c +2 -10
- data/vendor/liburing/test/send_recvmsg.c +5 -16
- data/vendor/liburing/test/shutdown.c +2 -1
- data/vendor/liburing/test/socket-io-cmd.c +215 -0
- data/vendor/liburing/test/socket-rw-eagain.c +2 -1
- data/vendor/liburing/test/socket-rw-offset.c +2 -1
- data/vendor/liburing/test/socket-rw.c +2 -1
- data/vendor/liburing/test/timeout.c +276 -0
- data/vendor/liburing/test/xattr.c +38 -25
- metadata +14 -3
- data/vendor/liburing/test/timeout-overflow.c +0 -204
@@ -294,7 +294,6 @@ Exit:
|
|
294
294
|
/* Test driver for failure cases of fsetxattr and fgetxattr. */
|
295
295
|
static int test_failure_fxattr(void)
|
296
296
|
{
|
297
|
-
int rc = 0;
|
298
297
|
struct io_uring ring;
|
299
298
|
char value[XATTR_SIZE];
|
300
299
|
|
@@ -313,31 +312,36 @@ static int test_failure_fxattr(void)
|
|
313
312
|
}
|
314
313
|
|
315
314
|
/* Test writing attributes. */
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
315
|
+
if (io_uring_fsetxattr(&ring, -1, KEY1, VALUE1, strlen(VALUE1), 0) >= 0)
|
316
|
+
return 1;
|
317
|
+
if (io_uring_fsetxattr(&ring, fd, NULL, VALUE1, strlen(VALUE1), 0) >= 0)
|
318
|
+
return 1;
|
319
|
+
if (io_uring_fsetxattr(&ring, fd, KEY1, NULL, strlen(VALUE1), 0) >= 0)
|
320
|
+
return 1;
|
321
|
+
if (io_uring_fsetxattr(&ring, fd, KEY1, VALUE1, 0, 0) != 0)
|
322
|
+
return 1;
|
323
|
+
if (io_uring_fsetxattr(&ring, fd, KEY1, VALUE1, -1, 0) >= 0)
|
324
|
+
return 1;
|
321
325
|
|
322
326
|
/* Test reading attributes. */
|
323
|
-
|
324
|
-
|
325
|
-
|
327
|
+
if (io_uring_fgetxattr(&ring, -1, KEY1, value, XATTR_SIZE) >= 0)
|
328
|
+
return 1;
|
329
|
+
if (io_uring_fgetxattr(&ring, fd, NULL, value, XATTR_SIZE) >= 0)
|
330
|
+
return 1;
|
331
|
+
if (io_uring_fgetxattr(&ring, fd, KEY1, value, 0) != 0)
|
332
|
+
return 1;
|
326
333
|
|
327
334
|
/* Cleanup. */
|
328
335
|
close(fd);
|
329
336
|
unlink(FILENAME);
|
330
|
-
|
331
337
|
io_uring_queue_exit(&ring);
|
332
|
-
|
333
|
-
return rc;
|
338
|
+
return 0;
|
334
339
|
}
|
335
340
|
|
336
341
|
|
337
342
|
/* Test driver for failure cases for setxattr and getxattr. */
|
338
343
|
static int test_failure_xattr(void)
|
339
344
|
{
|
340
|
-
int rc = 0;
|
341
345
|
struct io_uring ring;
|
342
346
|
char value[XATTR_SIZE];
|
343
347
|
|
@@ -352,24 +356,33 @@ static int test_failure_xattr(void)
|
|
352
356
|
t_create_file(FILENAME, 0);
|
353
357
|
|
354
358
|
/* Test writing attributes. */
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
359
|
+
if (io_uring_setxattr(&ring, "complete garbage", KEY1, VALUE1, strlen(VALUE1), 0) >= 0)
|
360
|
+
return 1;
|
361
|
+
if (io_uring_setxattr(&ring, NULL, KEY1, VALUE1, strlen(VALUE1), 0) >= 0)
|
362
|
+
return 1;
|
363
|
+
if (io_uring_setxattr(&ring, FILENAME, NULL, VALUE1, strlen(VALUE1), 0) >= 0)
|
364
|
+
return 1;
|
365
|
+
if (io_uring_setxattr(&ring, FILENAME, KEY1, NULL, strlen(VALUE1), 0) >= 0)
|
366
|
+
return 1;
|
367
|
+
if (io_uring_setxattr(&ring, FILENAME, KEY1, VALUE1, 0, 0) != 0)
|
368
|
+
return 1;
|
360
369
|
|
361
370
|
/* Test reading attributes. */
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
371
|
+
if (io_uring_getxattr(&ring, "complete garbage", KEY1, value, XATTR_SIZE) >= 0)
|
372
|
+
return 1;
|
373
|
+
if (io_uring_getxattr(&ring, NULL, KEY1, value, XATTR_SIZE) >= 0)
|
374
|
+
return 1;
|
375
|
+
if (io_uring_getxattr(&ring, FILENAME, NULL, value, XATTR_SIZE) >= 0)
|
376
|
+
return 1;
|
377
|
+
if (io_uring_getxattr(&ring, FILENAME, KEY1, NULL, XATTR_SIZE) != 0)
|
378
|
+
return 1;
|
379
|
+
if (io_uring_getxattr(&ring, FILENAME, KEY1, value, 0) != 0)
|
380
|
+
return 1;
|
367
381
|
|
368
382
|
/* Cleanup. */
|
369
383
|
io_uring_queue_exit(&ring);
|
370
384
|
unlink(FILENAME);
|
371
|
-
|
372
|
-
return rc;
|
385
|
+
return 0;
|
373
386
|
}
|
374
387
|
|
375
388
|
/* Test for invalid SQE, this will cause a segmentation fault if enabled. */
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -364,6 +364,7 @@ files:
|
|
364
364
|
- lib/polyphony/adapters/fs.rb
|
365
365
|
- lib/polyphony/adapters/irb.rb
|
366
366
|
- lib/polyphony/adapters/mysql2.rb
|
367
|
+
- lib/polyphony/adapters/open3.rb
|
367
368
|
- lib/polyphony/adapters/postgres.rb
|
368
369
|
- lib/polyphony/adapters/process.rb
|
369
370
|
- lib/polyphony/adapters/readline.rb
|
@@ -397,6 +398,8 @@ files:
|
|
397
398
|
- test/eg.rb
|
398
399
|
- test/helper.rb
|
399
400
|
- test/io_uring_test.rb
|
401
|
+
- test/open3/envutil.rb
|
402
|
+
- test/open3/find_executable.rb
|
400
403
|
- test/q.rb
|
401
404
|
- test/run.rb
|
402
405
|
- test/stress.rb
|
@@ -408,6 +411,8 @@ files:
|
|
408
411
|
- test/test_global_api.rb
|
409
412
|
- test/test_io.rb
|
410
413
|
- test/test_kernel.rb
|
414
|
+
- test/test_monitor.rb
|
415
|
+
- test/test_open3.rb
|
411
416
|
- test/test_pipe.rb
|
412
417
|
- test/test_process_supervision.rb
|
413
418
|
- test/test_queue.rb
|
@@ -459,6 +464,7 @@ files:
|
|
459
464
|
- vendor/liburing/examples/io_uring-udp.c
|
460
465
|
- vendor/liburing/examples/link-cp.c
|
461
466
|
- vendor/liburing/examples/poll-bench.c
|
467
|
+
- vendor/liburing/examples/rsrc-update-bench.c
|
462
468
|
- vendor/liburing/examples/send-zerocopy.c
|
463
469
|
- vendor/liburing/examples/ucontext-cp.c
|
464
470
|
- vendor/liburing/liburing-ffi.pc.in
|
@@ -508,7 +514,9 @@ files:
|
|
508
514
|
- vendor/liburing/test/ce593a6c480a.c
|
509
515
|
- vendor/liburing/test/close-opath.c
|
510
516
|
- vendor/liburing/test/config
|
517
|
+
- vendor/liburing/test/connect-rep.c
|
511
518
|
- vendor/liburing/test/connect.c
|
519
|
+
- vendor/liburing/test/coredump.c
|
512
520
|
- vendor/liburing/test/cq-full.c
|
513
521
|
- vendor/liburing/test/cq-overflow.c
|
514
522
|
- vendor/liburing/test/cq-peek-batch.c
|
@@ -598,7 +606,10 @@ files:
|
|
598
606
|
- vendor/liburing/test/recv-msgall-stream.c
|
599
607
|
- vendor/liburing/test/recv-msgall.c
|
600
608
|
- vendor/liburing/test/recv-multishot.c
|
609
|
+
- vendor/liburing/test/reg-fd-only.c
|
610
|
+
- vendor/liburing/test/reg-hint.c
|
601
611
|
- vendor/liburing/test/reg-reg-ring.c
|
612
|
+
- vendor/liburing/test/regbuf-merge.c
|
602
613
|
- vendor/liburing/test/register-restrictions.c
|
603
614
|
- vendor/liburing/test/rename.c
|
604
615
|
- vendor/liburing/test/ring-leak.c
|
@@ -620,6 +631,7 @@ files:
|
|
620
631
|
- vendor/liburing/test/sigfd-deadlock.c
|
621
632
|
- vendor/liburing/test/single-issuer.c
|
622
633
|
- vendor/liburing/test/skip-cqe.c
|
634
|
+
- vendor/liburing/test/socket-io-cmd.c
|
623
635
|
- vendor/liburing/test/socket-rw-eagain.c
|
624
636
|
- vendor/liburing/test/socket-rw-offset.c
|
625
637
|
- vendor/liburing/test/socket-rw.c
|
@@ -646,7 +658,6 @@ files:
|
|
646
658
|
- vendor/liburing/test/test.h
|
647
659
|
- vendor/liburing/test/thread-exit.c
|
648
660
|
- vendor/liburing/test/timeout-new.c
|
649
|
-
- vendor/liburing/test/timeout-overflow.c
|
650
661
|
- vendor/liburing/test/timeout.c
|
651
662
|
- vendor/liburing/test/tty-write-dpoll.c
|
652
663
|
- vendor/liburing/test/unlink.c
|
@@ -1,204 +0,0 @@
|
|
1
|
-
/* SPDX-License-Identifier: MIT */
|
2
|
-
/*
|
3
|
-
* Description: run timeout overflow test
|
4
|
-
*
|
5
|
-
*/
|
6
|
-
#include <errno.h>
|
7
|
-
#include <stdio.h>
|
8
|
-
#include <limits.h>
|
9
|
-
#include <string.h>
|
10
|
-
#include <sys/time.h>
|
11
|
-
|
12
|
-
#include "liburing.h"
|
13
|
-
#include "helpers.h"
|
14
|
-
|
15
|
-
#define TIMEOUT_MSEC 200
|
16
|
-
static int not_supported;
|
17
|
-
|
18
|
-
static void msec_to_ts(struct __kernel_timespec *ts, unsigned int msec)
|
19
|
-
{
|
20
|
-
ts->tv_sec = msec / 1000;
|
21
|
-
ts->tv_nsec = (msec % 1000) * 1000000;
|
22
|
-
}
|
23
|
-
|
24
|
-
static int check_timeout_support(void)
|
25
|
-
{
|
26
|
-
struct io_uring_sqe *sqe;
|
27
|
-
struct io_uring_cqe *cqe;
|
28
|
-
struct __kernel_timespec ts;
|
29
|
-
struct io_uring_params p;
|
30
|
-
struct io_uring ring;
|
31
|
-
int ret;
|
32
|
-
|
33
|
-
memset(&p, 0, sizeof(p));
|
34
|
-
ret = io_uring_queue_init_params(1, &ring, &p);
|
35
|
-
if (ret) {
|
36
|
-
fprintf(stderr, "ring setup failed: %d\n", ret);
|
37
|
-
return T_EXIT_FAIL;
|
38
|
-
}
|
39
|
-
|
40
|
-
/* not really a match, but same kernel added batched completions */
|
41
|
-
if (p.features & IORING_FEAT_POLL_32BITS) {
|
42
|
-
not_supported = 1;
|
43
|
-
return T_EXIT_SKIP;
|
44
|
-
}
|
45
|
-
|
46
|
-
sqe = io_uring_get_sqe(&ring);
|
47
|
-
msec_to_ts(&ts, TIMEOUT_MSEC);
|
48
|
-
io_uring_prep_timeout(sqe, &ts, 1, 0);
|
49
|
-
|
50
|
-
ret = io_uring_submit(&ring);
|
51
|
-
if (ret < 0) {
|
52
|
-
fprintf(stderr, "sqe submit failed: %d\n", ret);
|
53
|
-
goto err;
|
54
|
-
}
|
55
|
-
|
56
|
-
ret = io_uring_wait_cqe(&ring, &cqe);
|
57
|
-
if (ret < 0) {
|
58
|
-
fprintf(stderr, "wait completion %d\n", ret);
|
59
|
-
goto err;
|
60
|
-
}
|
61
|
-
|
62
|
-
if (cqe->res == -EINVAL) {
|
63
|
-
not_supported = 1;
|
64
|
-
fprintf(stdout, "Timeout not supported, ignored\n");
|
65
|
-
return 0;
|
66
|
-
}
|
67
|
-
|
68
|
-
io_uring_cqe_seen(&ring, cqe);
|
69
|
-
io_uring_queue_exit(&ring);
|
70
|
-
return T_EXIT_PASS;
|
71
|
-
err:
|
72
|
-
io_uring_queue_exit(&ring);
|
73
|
-
return T_EXIT_FAIL;
|
74
|
-
}
|
75
|
-
|
76
|
-
/*
|
77
|
-
* We first setup 4 timeout requests, which require a count value of 1, 1, 2,
|
78
|
-
* UINT_MAX, so the sequence is 1, 2, 4, 2. Before really timeout, this 4
|
79
|
-
* requests will not lead the change of cq_cached_tail, so as sq_dropped.
|
80
|
-
*
|
81
|
-
* And before this patch. The order of this four requests will be req1->req2->
|
82
|
-
* req4->req3. Actually, it should be req1->req2->req3->req4.
|
83
|
-
*
|
84
|
-
* Then, if there is 2 nop req. All timeout requests expect req4 will completed
|
85
|
-
* successful after the patch. And req1/req2 will completed successful with
|
86
|
-
* req3/req4 return -ETIME without this patch!
|
87
|
-
*/
|
88
|
-
static int test_timeout_overflow(void)
|
89
|
-
{
|
90
|
-
struct io_uring_sqe *sqe;
|
91
|
-
struct io_uring_cqe *cqe;
|
92
|
-
struct __kernel_timespec ts;
|
93
|
-
struct io_uring ring;
|
94
|
-
int i, ret;
|
95
|
-
|
96
|
-
ret = io_uring_queue_init(16, &ring, 0);
|
97
|
-
if (ret) {
|
98
|
-
fprintf(stderr, "ring setup failed: %d\n", ret);
|
99
|
-
return 1;
|
100
|
-
}
|
101
|
-
|
102
|
-
msec_to_ts(&ts, TIMEOUT_MSEC);
|
103
|
-
for (i = 0; i < 4; i++) {
|
104
|
-
unsigned num = 0;
|
105
|
-
sqe = io_uring_get_sqe(&ring);
|
106
|
-
switch (i) {
|
107
|
-
case 0:
|
108
|
-
case 1:
|
109
|
-
num = 1;
|
110
|
-
break;
|
111
|
-
case 2:
|
112
|
-
num = 2;
|
113
|
-
break;
|
114
|
-
case 3:
|
115
|
-
num = UINT_MAX;
|
116
|
-
break;
|
117
|
-
}
|
118
|
-
io_uring_prep_timeout(sqe, &ts, num, 0);
|
119
|
-
}
|
120
|
-
|
121
|
-
for (i = 0; i < 2; i++) {
|
122
|
-
sqe = io_uring_get_sqe(&ring);
|
123
|
-
io_uring_prep_nop(sqe);
|
124
|
-
io_uring_sqe_set_data(sqe, (void *) 1);
|
125
|
-
}
|
126
|
-
ret = io_uring_submit(&ring);
|
127
|
-
if (ret < 0) {
|
128
|
-
fprintf(stderr, "sqe submit failed: %d\n", ret);
|
129
|
-
goto err;
|
130
|
-
}
|
131
|
-
|
132
|
-
i = 0;
|
133
|
-
while (i < 6) {
|
134
|
-
ret = io_uring_wait_cqe(&ring, &cqe);
|
135
|
-
if (ret < 0) {
|
136
|
-
fprintf(stderr, "wait completion %d\n", ret);
|
137
|
-
goto err;
|
138
|
-
}
|
139
|
-
|
140
|
-
/*
|
141
|
-
* cqe1: first nop req
|
142
|
-
* cqe2: first timeout req, because of cqe1
|
143
|
-
* cqe3: second timeout req because of cqe1 + cqe2
|
144
|
-
* cqe4: second nop req
|
145
|
-
* cqe5~cqe6: the left three timeout req
|
146
|
-
*/
|
147
|
-
switch (i) {
|
148
|
-
case 0:
|
149
|
-
case 3:
|
150
|
-
if (io_uring_cqe_get_data(cqe) != (void *) 1) {
|
151
|
-
fprintf(stderr, "nop not seen as 1 or 2\n");
|
152
|
-
goto err;
|
153
|
-
}
|
154
|
-
break;
|
155
|
-
case 1:
|
156
|
-
case 2:
|
157
|
-
case 4:
|
158
|
-
if (cqe->res == -ETIME) {
|
159
|
-
fprintf(stderr, "expected not return -ETIME "
|
160
|
-
"for the #%d timeout req\n", i - 1);
|
161
|
-
goto err;
|
162
|
-
}
|
163
|
-
break;
|
164
|
-
case 5:
|
165
|
-
if (cqe->res != -ETIME) {
|
166
|
-
fprintf(stderr, "expected return -ETIME for "
|
167
|
-
"the #%d timeout req\n", i - 1);
|
168
|
-
goto err;
|
169
|
-
}
|
170
|
-
break;
|
171
|
-
}
|
172
|
-
io_uring_cqe_seen(&ring, cqe);
|
173
|
-
i++;
|
174
|
-
}
|
175
|
-
|
176
|
-
return 0;
|
177
|
-
err:
|
178
|
-
return 1;
|
179
|
-
}
|
180
|
-
|
181
|
-
int main(int argc, char *argv[])
|
182
|
-
{
|
183
|
-
int ret;
|
184
|
-
|
185
|
-
if (argc > 1)
|
186
|
-
return T_EXIT_SKIP;
|
187
|
-
|
188
|
-
ret = check_timeout_support();
|
189
|
-
if (ret == T_EXIT_FAIL) {
|
190
|
-
fprintf(stderr, "check_timeout_support failed: %d\n", ret);
|
191
|
-
return T_EXIT_FAIL;
|
192
|
-
}
|
193
|
-
|
194
|
-
if (not_supported)
|
195
|
-
return T_EXIT_SKIP;
|
196
|
-
|
197
|
-
ret = test_timeout_overflow();
|
198
|
-
if (ret) {
|
199
|
-
fprintf(stderr, "test_timeout_overflow failed\n");
|
200
|
-
return T_EXIT_FAIL;
|
201
|
-
}
|
202
|
-
|
203
|
-
return T_EXIT_PASS;
|
204
|
-
}
|