… | |
… | |
456 | if (nev) |
456 | if (nev) |
457 | { |
457 | { |
458 | struct io_uring_sqe *sqe = iouring_sqe_get (EV_A); |
458 | struct io_uring_sqe *sqe = iouring_sqe_get (EV_A); |
459 | sqe->opcode = IORING_OP_POLL_ADD; |
459 | sqe->opcode = IORING_OP_POLL_ADD; |
460 | sqe->fd = fd; |
460 | sqe->fd = fd; |
|
|
461 | sqe->addr = 0; |
461 | sqe->user_data = (uint32_t)fd | ((__u64)(uint32_t)anfds [fd].egen << 32); |
462 | sqe->user_data = (uint32_t)fd | ((__u64)(uint32_t)anfds [fd].egen << 32); |
462 | sqe->poll_events = |
463 | sqe->poll_events = |
463 | (nev & EV_READ ? POLLIN : 0) |
464 | (nev & EV_READ ? POLLIN : 0) |
464 | | (nev & EV_WRITE ? POLLOUT : 0); |
465 | | (nev & EV_WRITE ? POLLOUT : 0); |
465 | iouring_sqe_submit (EV_A_ sqe); |
466 | iouring_sqe_submit (EV_A_ sqe); |
… | |
… | |
516 | return; |
517 | return; |
517 | |
518 | |
518 | if (ecb_expect_false (res < 0)) |
519 | if (ecb_expect_false (res < 0)) |
519 | { |
520 | { |
520 | /*TODO: EINVAL handling (was something failed with this fd)*/ |
521 | /*TODO: EINVAL handling (was something failed with this fd)*/ |
521 | /*TODO: EBUSY happens when?*/ |
|
|
522 | |
522 | |
523 | if (res == -EBADF) |
523 | if (res == -EBADF) |
524 | { |
524 | { |
525 | assert (("libev: event loop rejected bad fd", res != -EBADF)); |
525 | assert (("libev: event loop rejected bad fd", res != -EBADF)); |
526 | fd_kill (EV_A_ fd); |
526 | fd_kill (EV_A_ fd); |