Back to all reviewers

Protect network buffer lifecycle

netty/netty
Based on 4 comments
Java

When handling network buffers in protocol implementations, ensure proper lifecycle management to prevent memory leaks and data corruption. Key practices:

Networking Java

Reviewer Prompt

When handling network buffers in protocol implementations, ensure proper lifecycle management to prevent memory leaks and data corruption. Key practices:

  1. Convert mutable data to immutable form before async operations: ```java // WRONG ctx.fireUserEventTriggered(evt); event.userEvent = String.valueOf(evt); // evt may be modified/released

// RIGHT String eventStr = String.valueOf(evt); ctx.fireUserEventTriggered(evt); event.userEvent = eventStr;


2. Use buffer slicing and reference counting for partial data:
```java
// WRONG
byte[] partialData = new byte[5];
System.arraycopy(data, 0, partialData, 0, 5);

// RIGHT
ByteBuf chunk = ctx.alloc().buffer().writeBytes(data);
ByteBuf partial = chunk.retainedSlice(0, 5);
// ... use partial ...
partial.release();
chunk.release();
  1. Clear buffer arrays after submission to prevent stale references:
    // After buffer submission
    iovArray.clear(); // Clear references that are no longer needed
    

This guidance is especially important in asynchronous networking code where buffers may be accessed across different threads or event loop iterations.

4
Comments Analyzed
Java
Primary Language
Networking
Category

Source Discussions