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();
}
Defined In
Source
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