Home / Function/ drain() — netty Function Reference

drain() — netty Function Reference

Architecture documentation for the drain() function in Http3FrameCodec.java from the netty codebase.

Function java Buffer Allocators calls 2 called by 3

Entity Profile

Dependency Diagram

graph TD
  5fe8b6a4_8a83_021e_73f5_eec914124c9b["drain()"]
  95db0354_1de2_6bba_62f7_7920b9ac9012["WriteResumptionListener"]
  5fe8b6a4_8a83_021e_73f5_eec914124c9b -->|defined in| 95db0354_1de2_6bba_62f7_7920b9ac9012
  f7f031b7_1830_ea2e_79b9_cbe1e41535f4["channelInactive()"]
  f7f031b7_1830_ea2e_79b9_cbe1e41535f4 -->|calls| 5fe8b6a4_8a83_021e_73f5_eec914124c9b
  8e959716_4283_14c4_3615_74bd8ff69a7b["handlerRemoved0()"]
  8e959716_4283_14c4_3615_74bd8ff69a7b -->|calls| 5fe8b6a4_8a83_021e_73f5_eec914124c9b
  4433feb1_9179_606e_bfc6_7cb187b0948d["operationComplete()"]
  4433feb1_9179_606e_bfc6_7cb187b0948d -->|calls| 5fe8b6a4_8a83_021e_73f5_eec914124c9b
  8956333e_1f8a_a4ec_390f_4f648d6508a4["write0()"]
  5fe8b6a4_8a83_021e_73f5_eec914124c9b -->|calls| 8956333e_1f8a_a4ec_390f_4f648d6508a4
  ac60c66b_2422_a705_0b0b_19d8b2457352["flush()"]
  5fe8b6a4_8a83_021e_73f5_eec914124c9b -->|calls| ac60c66b_2422_a705_0b0b_19d8b2457352
  style 5fe8b6a4_8a83_021e_73f5_eec914124c9b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java lines 770–795

        void drain() {
            assert ctx.channel().eventLoop().inEventLoop();
            boolean flushSeen = false;
            try {
                for (;;) {
                    Object entry = queue.current();
                    if (entry == null) {
                        break;
                    }
                    if (entry == FLUSH) {
                        flushSeen = true;
                        queue.remove().trySuccess();
                    } else {
                        // Retain the entry as remove() will call release() as well.
                        codec.write0(ctx, ReferenceCountUtil.retain(entry), queue.remove());
                    }
                }
                // indicate that writes do not need to be enqueued. As we are on the eventloop, no other writes can
                // happen while we are draining, hence we would not write out of order.
                codec.writeResumptionListener = null;
            } finally {
                if (flushSeen) {
                    codec.flush(ctx);
                }
            }
        }

Domain

Subdomains

Frequently Asked Questions

What does drain() do?
drain() is a function in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java.
Where is drain() defined?
drain() is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java at line 770.
What does drain() call?
drain() calls 2 function(s): flush, write0.
What calls drain()?
drain() is called by 3 function(s): channelInactive, handlerRemoved0, operationComplete.

Analyze Your Own Codebase

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

Try Supermodel Free