MCPcopy Create free account
hub / github.com/axboe/liburing / test_buf_select_pipe

Function test_buf_select_pipe

test/read-write.c:529–600  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

527}
528
529static int test_buf_select_pipe(void)
530{
531 struct io_uring_sqe *sqe;
532 struct io_uring_cqe *cqe;
533 struct io_uring ring;
534 int ret, i;
535 int fds[2];
536
537 if (no_buf_select)
538 return 0;
539
540 ret = io_uring_queue_init(64, &ring, 0);
541 if (ret) {
542 fprintf(stderr, "ring create failed: %d\n", ret);
543 return 1;
544 }
545
546 ret = provide_buffers_iovec(&ring, 0);
547 if (ret) {
548 fprintf(stderr, "provide buffers failed: %d\n", ret);
549 return 1;
550 }
551
552 ret = pipe(fds);
553 if (ret) {
554 fprintf(stderr, "pipe failed: %d\n", ret);
555 return 1;
556 }
557
558 for (i = 0; i < 5; i++) {
559 sqe = io_uring_get_sqe(&ring);
560 io_uring_prep_read(sqe, fds[0], NULL, 1 /* max read 1 per go */, -1);
561 sqe->flags |= IOSQE_BUFFER_SELECT;
562 sqe->buf_group = 0;
563 }
564 io_uring_submit(&ring);
565
566 ret = write(fds[1], "01234", 5);
567 if (ret != 5) {
568 fprintf(stderr, "pipe write failed %d\n", ret);
569 return 1;
570 }
571
572 for (i = 0; i < 5; i++) {
573 const char *buff;
574
575 if (io_uring_wait_cqe(&ring, &cqe)) {
576 fprintf(stderr, "bad wait %d\n", i);
577 return 1;
578 }
579 if (cqe->res != 1) {
580 fprintf(stderr, "expected read %d\n", cqe->res);
581 return 1;
582 }
583 if (!(cqe->flags & IORING_CQE_F_BUFFER)) {
584 fprintf(stderr, "no buffer %d\n", cqe->res);
585 return 1;
586 }

Callers 1

mainFunction · 0.85

Calls 5

io_uring_queue_initFunction · 0.85
provide_buffers_iovecFunction · 0.85
io_uring_submitFunction · 0.85
io_uring_queue_exitFunction · 0.85
io_uring_get_sqeFunction · 0.50

Tested by

no test coverage detected