From 1da3a8c2405a4f2d53f332514a8b0469f40229c9 Mon Sep 17 00:00:00 2001 From: Valentine <21033866+BoomEaro@users.noreply.github.com> Date: Sat, 12 Apr 2025 10:10:51 +0300 Subject: [PATCH] #3814: Fire exception in pipeline if async task in eventloop throws exception --- .../main/java/net/md_5/bungee/UserConnection.java | 2 +- .../net/md_5/bungee/connection/InitialHandler.java | 13 +------------ .../java/net/md_5/bungee/netty/ChannelWrapper.java | 8 +++++++- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java index 2c9f55c9..84ca1eae 100644 --- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java +++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java @@ -334,7 +334,7 @@ public final class UserConnection implements ProxiedPlayer { Preconditions.checkNotNull( request, "request" ); - ch.getHandle().eventLoop().execute( () -> connect0( request ) ); + ch.scheduleIfNecessary( () -> connect0( request ) ); } private void connect0(final ServerConnectRequest request) diff --git a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java index 7c0c2a02..173107a7 100644 --- a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java +++ b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java @@ -2,7 +2,6 @@ package net.md_5.bungee.connection; import com.google.common.base.Preconditions; import com.google.gson.Gson; -import io.netty.channel.EventLoop; import java.math.BigInteger; import java.net.InetSocketAddress; import java.net.SocketAddress; @@ -901,17 +900,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection { return (result, error) -> { - EventLoop eventLoop = ch.getHandle().eventLoop(); - if ( eventLoop.inEventLoop() ) - { - if ( !ch.isClosing() ) - { - callback.done( result, error ); - } - return; - } - - eventLoop.execute( () -> + ch.scheduleIfNecessary( () -> { if ( !ch.isClosing() ) { diff --git a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java index cdad6d9e..94ec569b 100644 --- a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java +++ b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java @@ -238,6 +238,12 @@ public class ChannelWrapper return; } - ch.eventLoop().execute( task ); + ch.eventLoop().submit( task ).addListener( future -> + { + if ( !future.isSuccess() ) + { + ch.pipeline().fireExceptionCaught( future.cause() ); + } + } ); } }