From 86ea4440d95cd79bb68525892dca619ba127d60b Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Thu, 7 Nov 2019 19:18:44 +0100 Subject: [PATCH] Cache ConnectionBase localAddress / remoteAddress instances - see #3185 --- .../vertx/core/net/impl/ConnectionBase.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/vertx/core/net/impl/ConnectionBase.java b/src/main/java/io/vertx/core/net/impl/ConnectionBase.java index d837b4341..d3550352c 100644 --- a/src/main/java/io/vertx/core/net/impl/ConnectionBase.java +++ b/src/main/java/io/vertx/core/net/impl/ConnectionBase.java @@ -62,6 +62,8 @@ public abstract class ConnectionBase { private Handler closeHandler; private int writeInProgress; private Object metric; + private SocketAddress remoteAddress; + private SocketAddress localAddress; // State accessed exclusively from the event loop thread private boolean read; @@ -424,19 +426,27 @@ public abstract class ConnectionBase { } public SocketAddress remoteAddress() { - java.net.SocketAddress addr = chctx.channel().remoteAddress(); - if (addr != null) { - return vertx.transport().convert(addr); + SocketAddress address = remoteAddress; + if (address == null) { + java.net.SocketAddress addr = chctx.channel().remoteAddress(); + if (addr != null) { + address = vertx.transport().convert(addr); + remoteAddress = address; + } } - return null; + return address; } public SocketAddress localAddress() { - java.net.SocketAddress addr = chctx.channel().localAddress(); - if (addr != null) { - return vertx.transport().convert(addr); + SocketAddress address = localAddress; + if (address == null) { + java.net.SocketAddress addr = chctx.channel().localAddress(); + if (addr != null) { + address = vertx.transport().convert(addr); + localAddress = address; + } } - return null; + return address; } public void handleMessage(Object msg) {