mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-11-22 14:56:25 +01:00
Add Timeout to CompletableFuture in GeyserBungeePingPassthrough to Prevent Memory Leak (#4858)
* fix: Add timeout for GeyserBungeePingPassthrough#getPingInformation Signed-off-by: ByteExceptionM <git@byteexception.eu> * fix: Use Geyser Logger instead of Bungee Logger Signed-off-by: ByteExceptionM <git@byteexception.eu> * Fix typo Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> * chore: Add ip suppression if configured Signed-off-by: ByteExceptionM <git@byteexception.eu> * Remove empty line Co-authored-by: chris <github@onechris.mozmail.com> * Remove empty line Co-authored-by: chris <github@onechris.mozmail.com> --------- Signed-off-by: ByteExceptionM <git@byteexception.eu> Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> Co-authored-by: chris <github@onechris.mozmail.com>
This commit is contained in:
parent
305495c923
commit
677a56cf6c
2 changed files with 15 additions and 3 deletions
|
@ -36,6 +36,7 @@ import net.md_5.bungee.api.event.ProxyPingEvent;
|
|||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.geysermc.geyser.GeyserImpl;
|
||||
import org.geysermc.geyser.ping.GeyserPingInfo;
|
||||
import org.geysermc.geyser.ping.IGeyserPingPassthrough;
|
||||
|
||||
|
@ -43,6 +44,7 @@ import java.net.InetSocketAddress;
|
|||
import java.net.SocketAddress;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, Listener {
|
||||
|
@ -59,7 +61,17 @@ public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, List
|
|||
future.complete(event);
|
||||
}
|
||||
}));
|
||||
ProxyPingEvent event = future.join();
|
||||
|
||||
ProxyPingEvent event;
|
||||
|
||||
try {
|
||||
event = future.get(100, TimeUnit.MILLISECONDS);
|
||||
} catch (Throwable cause) {
|
||||
String address = GeyserImpl.getInstance().getConfig().isLogPlayerIpAddresses() ? inetSocketAddress.toString() : "<IP address withheld>";
|
||||
GeyserImpl.getInstance().getLogger().error("Failed to get ping information for " + address, cause);
|
||||
return null;
|
||||
}
|
||||
|
||||
ServerPing response = event.getResponse();
|
||||
return new GeyserPingInfo(
|
||||
response.getDescriptionComponent().toLegacyText(),
|
||||
|
|
|
@ -35,10 +35,10 @@ import java.net.InetSocketAddress;
|
|||
public interface IGeyserPingPassthrough {
|
||||
|
||||
/**
|
||||
* Get the MOTD of the server displayed on the multiplayer screen
|
||||
* Gets the ping information, including the MOTD and player count, from the server
|
||||
*
|
||||
* @param inetSocketAddress the ip address of the client pinging the server
|
||||
* @return string of the MOTD
|
||||
* @return the ping information
|
||||
*/
|
||||
@Nullable
|
||||
GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress);
|
||||
|
|
Loading…
Reference in a new issue