Remove not needed intermediate collection while reading DatagramPackets in native transports
Motivation: We used an intermediate collection to store the read DatagramPackets and only fired these through the pipeline once wewere done with the reading loop. This is not needed and can also increase memory usage. Modifications: Remove intermediate collection Result: Less overhead and possible less memory usage during read loop.
This commit is contained in:
parent
6d80c641e9
commit
c318fc7cea
@ -431,7 +431,6 @@ public final class EpollDatagramChannel extends AbstractEpollChannel implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
final class EpollDatagramChannelUnsafe extends AbstractEpollUnsafe {
|
final class EpollDatagramChannelUnsafe extends AbstractEpollUnsafe {
|
||||||
private final List<Object> readBuf = new ArrayList<Object>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void connect(SocketAddress remote, SocketAddress local, ChannelPromise channelPromise) {
|
public void connect(SocketAddress remote, SocketAddress local, ChannelPromise channelPromise) {
|
||||||
@ -514,7 +513,10 @@ public final class EpollDatagramChannel extends AbstractEpollChannel implements
|
|||||||
allocHandle.lastBytesRead(remoteAddress.receivedAmount());
|
allocHandle.lastBytesRead(remoteAddress.receivedAmount());
|
||||||
data.writerIndex(data.writerIndex() + allocHandle.lastBytesRead());
|
data.writerIndex(data.writerIndex() + allocHandle.lastBytesRead());
|
||||||
|
|
||||||
readBuf.add(new DatagramPacket(data, (InetSocketAddress) localAddress(), remoteAddress));
|
readPending = false;
|
||||||
|
pipeline.fireChannelRead(
|
||||||
|
new DatagramPacket(data, (InetSocketAddress) localAddress(), remoteAddress));
|
||||||
|
|
||||||
data = null;
|
data = null;
|
||||||
} while (allocHandle.continueReading());
|
} while (allocHandle.continueReading());
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
@ -524,12 +526,6 @@ public final class EpollDatagramChannel extends AbstractEpollChannel implements
|
|||||||
exception = t;
|
exception = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = readBuf.size();
|
|
||||||
for (int i = 0; i < size; i ++) {
|
|
||||||
readPending = false;
|
|
||||||
pipeline.fireChannelRead(readBuf.get(i));
|
|
||||||
}
|
|
||||||
readBuf.clear();
|
|
||||||
allocHandle.readComplete();
|
allocHandle.readComplete();
|
||||||
pipeline.fireChannelReadComplete();
|
pipeline.fireChannelReadComplete();
|
||||||
|
|
||||||
|
@ -403,7 +403,6 @@ public final class KQueueDatagramChannel extends AbstractKQueueChannel implement
|
|||||||
}
|
}
|
||||||
|
|
||||||
final class KQueueDatagramChannelUnsafe extends AbstractKQueueUnsafe {
|
final class KQueueDatagramChannelUnsafe extends AbstractKQueueUnsafe {
|
||||||
private final List<Object> readBuf = new ArrayList<Object>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void connect(SocketAddress remote, SocketAddress local, ChannelPromise channelPromise) {
|
public void connect(SocketAddress remote, SocketAddress local, ChannelPromise channelPromise) {
|
||||||
@ -483,7 +482,10 @@ public final class KQueueDatagramChannel extends AbstractKQueueChannel implement
|
|||||||
allocHandle.lastBytesRead(remoteAddress.receivedAmount());
|
allocHandle.lastBytesRead(remoteAddress.receivedAmount());
|
||||||
data.writerIndex(data.writerIndex() + allocHandle.lastBytesRead());
|
data.writerIndex(data.writerIndex() + allocHandle.lastBytesRead());
|
||||||
|
|
||||||
readBuf.add(new DatagramPacket(data, (InetSocketAddress) localAddress(), remoteAddress));
|
readPending = false;
|
||||||
|
pipeline.fireChannelRead(
|
||||||
|
new DatagramPacket(data, (InetSocketAddress) localAddress(), remoteAddress));
|
||||||
|
|
||||||
data = null;
|
data = null;
|
||||||
} while (allocHandle.continueReading());
|
} while (allocHandle.continueReading());
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
@ -493,12 +495,6 @@ public final class KQueueDatagramChannel extends AbstractKQueueChannel implement
|
|||||||
exception = t;
|
exception = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = readBuf.size();
|
|
||||||
for (int i = 0; i < size; i ++) {
|
|
||||||
readPending = false;
|
|
||||||
pipeline.fireChannelRead(readBuf.get(i));
|
|
||||||
}
|
|
||||||
readBuf.clear();
|
|
||||||
allocHandle.readComplete();
|
allocHandle.readComplete();
|
||||||
pipeline.fireChannelReadComplete();
|
pipeline.fireChannelReadComplete();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user