From 5bb535e78a2a93897a7aac1f8a58b02259a3a972 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Mon, 21 Sep 2020 21:32:20 +0200 Subject: [PATCH] Only create ConnectTimeoutException if really needed (#10595) Motivation: Creating exceptions is expensive so we should only do so if really needed. Modifications: Only create the ConnectTimeoutException if we really need it. Result: Less overhead --- .../java/io/netty/channel/epoll/AbstractEpollChannel.java | 6 +++--- .../java/io/netty/channel/kqueue/AbstractKQueueChannel.java | 6 +++--- .../main/java/io/netty/channel/nio/AbstractNioChannel.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java b/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java index bdbdf94513..086420b9a0 100644 --- a/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java +++ b/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java @@ -564,9 +564,9 @@ abstract class AbstractEpollChannel extends AbstractChannel implements UnixChann if (connectTimeoutMillis > 0) { connectTimeoutFuture = eventLoop().schedule(() -> { ChannelPromise connectPromise = AbstractEpollChannel.this.connectPromise; - ConnectTimeoutException cause = - new ConnectTimeoutException("connection timed out: " + remoteAddress); - if (connectPromise != null && connectPromise.tryFailure(cause)) { + if (connectPromise != null && !connectPromise.isDone() + && connectPromise.tryFailure(new ConnectTimeoutException( + "connection timed out: " + remoteAddress))) { close(voidPromise()); } }, connectTimeoutMillis, TimeUnit.MILLISECONDS); diff --git a/transport-native-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueChannel.java b/transport-native-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueChannel.java index a0a4ea75e1..ea881c5dd0 100644 --- a/transport-native-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueChannel.java +++ b/transport-native-kqueue/src/main/java/io/netty/channel/kqueue/AbstractKQueueChannel.java @@ -553,9 +553,9 @@ abstract class AbstractKQueueChannel extends AbstractChannel implements UnixChan if (connectTimeoutMillis > 0) { connectTimeoutFuture = eventLoop().schedule(() -> { ChannelPromise connectPromise = AbstractKQueueChannel.this.connectPromise; - ConnectTimeoutException cause = - new ConnectTimeoutException("connection timed out: " + remoteAddress); - if (connectPromise != null && connectPromise.tryFailure(cause)) { + if (connectPromise != null && !connectPromise.isDone() + && connectPromise.tryFailure(new ConnectTimeoutException( + "connection timed out: " + remoteAddress))) { close(voidPromise()); } }, connectTimeoutMillis, TimeUnit.MILLISECONDS); diff --git a/transport/src/main/java/io/netty/channel/nio/AbstractNioChannel.java b/transport/src/main/java/io/netty/channel/nio/AbstractNioChannel.java index ffe2a73c66..8e22a1e799 100644 --- a/transport/src/main/java/io/netty/channel/nio/AbstractNioChannel.java +++ b/transport/src/main/java/io/netty/channel/nio/AbstractNioChannel.java @@ -240,9 +240,9 @@ public abstract class AbstractNioChannel extends AbstractChannel { if (connectTimeoutMillis > 0) { connectTimeoutFuture = eventLoop().schedule(() -> { ChannelPromise connectPromise = AbstractNioChannel.this.connectPromise; - ConnectTimeoutException cause = - new ConnectTimeoutException("connection timed out: " + remoteAddress); - if (connectPromise != null && connectPromise.tryFailure(cause)) { + if (connectPromise != null && !connectPromise.isDone() + && connectPromise.tryFailure(new ConnectTimeoutException( + "connection timed out: " + remoteAddress))) { close(voidPromise()); } }, connectTimeoutMillis, TimeUnit.MILLISECONDS);