Home / Class/ AbstractUringUnsafe Class — netty Architecture

AbstractUringUnsafe Class — netty Architecture

Architecture documentation for the AbstractUringUnsafe class in AbstractIoUringChannel.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  19011d76_ce85_4831_bbdf_3b21a88f2b1b["AbstractUringUnsafe"]
  4b3ce6a2_c54b_28e3_daab_355d73fb6815["AbstractIoUringChannel.java"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|defined in| 4b3ce6a2_c54b_28e3_daab_355d73fb6815
  ffeff3ed_8ff3_e79f_18d3_0a6c793736fb["scheduleWriteMultiple()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| ffeff3ed_8ff3_e79f_18d3_0a6c793736fb
  16ff8d66_a417_f95c_164f_de86030ce50d["scheduleWriteSingle()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 16ff8d66_a417_f95c_164f_de86030ce50d
  5f45f466_5da9_76a6_e49e_f54bf3e34ae8["handle()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 5f45f466_5da9_76a6_e49e_f54bf3e34ae8
  36e791ce_2def_f38e_20d4_d5bcb7a2e093["unregistered()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 36e791ce_2def_f38e_20d4_d5bcb7a2e093
  8147a0ed_8013_83a9_479a_7347b58094a7["handleDelayedClosed()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 8147a0ed_8013_83a9_479a_7347b58094a7
  fa9b16c6_c963_88d2_4e5b_2bd377a7b30c["pollAddComplete()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| fa9b16c6_c963_88d2_4e5b_2bd377a7b30c
  941f2659_0934_3a6d_3c64_960438f90518["close()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 941f2659_0934_3a6d_3c64_960438f90518
  6e0c92b8_637a_5a3b_2ee8_78a64b10dc2b["cancelOps()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 6e0c92b8_637a_5a3b_2ee8_78a64b10dc2b
  0f871ab8_cfcc_3c2c_5b64_8ab8603d4d4a["canCloseNow()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 0f871ab8_cfcc_3c2c_5b64_8ab8603d4d4a
  4b3844c1_ec1c_833a_52a6_32035373f964["canCloseNow0()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 4b3844c1_ec1c_833a_52a6_32035373f964
  5883137b_d798_3943_16d0_2c9bd6dec745["closeNow()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 5883137b_d798_3943_16d0_2c9bd6dec745
  6cf22375_3a52_781e_5444_e00a9c00fe03["flush0()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 6cf22375_3a52_781e_5444_e00a9c00fe03
  4af71a65_a4fd_8778_811b_01ce32d090eb["fulfillConnectPromise()"]
  19011d76_ce85_4831_bbdf_3b21a88f2b1b -->|method| 4af71a65_a4fd_8778_811b_01ce32d090eb

Relationship Graph

Source Code

transport-classes-io_uring/src/main/java/io/netty/channel/uring/AbstractIoUringChannel.java lines 432–1167

    protected abstract class AbstractUringUnsafe extends AbstractUnsafe implements IoUringIoHandle {
        private IoUringRecvByteAllocatorHandle allocHandle;
        private boolean closed;
        private boolean socketIsEmpty;

        /**
         * Schedule the write of multiple messages in the {@link ChannelOutboundBuffer} and returns the number of
         * {@link #writeComplete(byte, int, int, short)} calls that are expected because of the scheduled write.
         */
        protected abstract int scheduleWriteMultiple(ChannelOutboundBuffer in);

        /**
         * Schedule the write of a single message and returns the number of
         * {@link #writeComplete(byte, int, int, short)} calls that are expected because of the scheduled write.
         */
        protected abstract int scheduleWriteSingle(Object msg);

        @Override
        public final void handle(IoRegistration registration, IoEvent ioEvent) {
            IoUringIoEvent event = (IoUringIoEvent) ioEvent;
            byte op = event.opcode();
            int res = event.res();
            int flags = event.flags();
            short data = event.data();
            switch (op) {
                case Native.IORING_OP_RECV:
                case Native.IORING_OP_ACCEPT:
                case Native.IORING_OP_RECVMSG:
                case Native.IORING_OP_READ:
                    readComplete(op, res, flags, data);
                    break;
                case Native.IORING_OP_WRITEV:
                case Native.IORING_OP_SEND:
                case Native.IORING_OP_SENDMSG:
                case Native.IORING_OP_WRITE:
                case Native.IORING_OP_SPLICE:
                case Native.IORING_OP_SEND_ZC:
                case Native.IORING_OP_SENDMSG_ZC:
                    writeComplete(op, res, flags, data);
                    break;
                case Native.IORING_OP_POLL_ADD:
                    pollAddComplete(res, flags, data);
                    break;
                case Native.IORING_OP_ASYNC_CANCEL:
                    cancelComplete0(op, res, flags, data);
                    break;
                case Native.IORING_OP_CONNECT:
                    connectComplete(op, res, flags, data);

                    // once the connect was completed we can also free some resources that are not needed anymore.
                    freeMsgHdrArray();
                    freeRemoteAddressMemory();
                    break;
                case Native.IORING_OP_CLOSE:
                    if (res != Native.ERRNO_ECANCELED_NEGATIVE) {
                        if (delayedClose != null) {
                            delayedClose.promise.setSuccess();
                        }
                        closed = true;
                    }
                    break;
                default:
                    break;
            }

            // We delay the actual close if there is still a write or read scheduled, let's see if there
            // was a close that needs to be done now.
            handleDelayedClosed();

            if (ioState == 0 && closed) {
                // Cancel the registration now.
                registration.cancel();
            }
        }

        @Override
        public void unregistered() {
            freeMsgHdrArray();
            freeRemoteAddressMemory();
        }

Frequently Asked Questions

What is the AbstractUringUnsafe class?
AbstractUringUnsafe is a class in the netty codebase, defined in transport-classes-io_uring/src/main/java/io/netty/channel/uring/AbstractIoUringChannel.java.
Where is AbstractUringUnsafe defined?
AbstractUringUnsafe is defined in transport-classes-io_uring/src/main/java/io/netty/channel/uring/AbstractIoUringChannel.java at line 432.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free