Home / Class/ DefaultKqueueIoRegistration Class — netty Architecture

DefaultKqueueIoRegistration Class — netty Architecture

Architecture documentation for the DefaultKqueueIoRegistration class in KQueueIoHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  7590dada_52a8_cd3f_013c_39eaea0e149a["DefaultKqueueIoRegistration"]
  9eae14e2_0d94_eb0d_11d0_56314543bdff["KQueueIoHandler.java"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|defined in| 9eae14e2_0d94_eb0d_11d0_56314543bdff
  5c6f2faf_144e_8480_a4f1_576f0c398566["DefaultKqueueIoRegistration()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| 5c6f2faf_144e_8480_a4f1_576f0c398566
  a75c7d88_c5c2_7598_d12a_b4da6063f754["isHandleForChannel()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| a75c7d88_c5c2_7598_d12a_b4da6063f754
  e79403ce_69f4_a1b5_ada9_c6a3423aeacb["T()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| e79403ce_69f4_a1b5_ada9_c6a3423aeacb
  a636ac7b_4a6a_42a1_290f_1208718474a8["submit()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| a636ac7b_4a6a_42a1_290f_1208718474a8
  7ce17382_ba1a_c3fd_715c_71ef04f26d10["handle()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| 7ce17382_ba1a_c3fd_715c_71ef04f26d10
  eb6763f5_9eb8_7a88_abe9_a6c4a00713df["evSet()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| eb6763f5_9eb8_7a88_abe9_a6c4a00713df
  f7441d5e_ee7b_72a2_c74a_d9a2c3bc50e7["isValid()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| f7441d5e_ee7b_72a2_c74a_d9a2c3bc50e7
  984fe5fa_153e_2c00_126c_0f45ae1adb91["cancel()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| 984fe5fa_153e_2c00_126c_0f45ae1adb91
  298c43ea_0293_bb62_82a2_0b6d6b2d313a["cancel0()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| 298c43ea_0293_bb62_82a2_0b6d6b2d313a
  1e77e40a_f188_9c62_9373_036f4078e2fa["close()"]
  7590dada_52a8_cd3f_013c_39eaea0e149a -->|method| 1e77e40a_f188_9c62_9373_036f4078e2fa

Relationship Graph

Source Code

transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueIoHandler.java lines 424–517

    private final class DefaultKqueueIoRegistration implements IoRegistration {
        private boolean cancellationPending;
        private final AtomicBoolean canceled = new AtomicBoolean();
        private final KQueueIoEvent event = new KQueueIoEvent();

        final KQueueIoHandle handle;
        final long id;
        private final ThreadAwareExecutor executor;

        DefaultKqueueIoRegistration(ThreadAwareExecutor executor, KQueueIoHandle handle) {
            this.executor = executor;
            this.handle = handle;
            id = generateNextId();
        }

        boolean isHandleForChannel() {
            return handle instanceof AbstractKQueueChannel.AbstractKQueueUnsafe;
        }

        @SuppressWarnings("unchecked")
        @Override
        public <T> T attachment() {
            return (T) nativeArrays;
        }

        @Override
        public long submit(IoOps ops) {
            KQueueIoOps kQueueIoOps = cast(ops);
            if (!isValid()) {
                return -1;
            }
            short filter = kQueueIoOps.filter();
            short flags = kQueueIoOps.flags();
            int fflags = kQueueIoOps.fflags();
            if (executor.isExecutorThread(Thread.currentThread())) {
                evSet(filter, flags, fflags);
            } else {
                executor.execute(() -> evSet(filter, flags, fflags));
            }
            return 0;
        }

        void handle(int ident, short filter, short flags, int fflags, long data, long udata) {
            if (cancellationPending) {
                // This registration was already cancelled but not removed from the map yet, just ignore.
                return;
            }
            event.update(ident, filter, flags, fflags, data, udata);
            handle.handle(this, event);
        }

        private void evSet(short filter, short flags, int fflags) {
            if (cancellationPending) {
                // This registration was already cancelled but not removed from the map yet, just ignore.
                return;
            }
            changeList.evSet(handle.ident(), filter, flags, fflags, 0, id);
        }

        @Override
        public boolean isValid() {
            return !canceled.get();
        }

        @Override
        public boolean cancel() {
            if (!canceled.compareAndSet(false, true)) {
                return false;
            }
            if (executor.isExecutorThread(Thread.currentThread())) {
                cancel0();
            } else {
                executor.execute(this::cancel0);
            }
            return true;
        }

        private void cancel0() {
            // Let's add the registration to our cancelledRegistrations queue so we will process it
            // after we processed all events. This is needed as otherwise we might end up removing it
            // from the registration map while we still have some unprocessed events.

Frequently Asked Questions

What is the DefaultKqueueIoRegistration class?
DefaultKqueueIoRegistration is a class in the netty codebase, defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueIoHandler.java.
Where is DefaultKqueueIoRegistration defined?
DefaultKqueueIoRegistration is defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueIoHandler.java at line 424.

Analyze Your Own Codebase

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

Try Supermodel Free