From ff8dd0cdaa6629faeb85ed1381d0aa946f429412 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sat, 2 Apr 2022 22:05:29 +0200 Subject: [PATCH] Misc networking improvements Signed-off-by: TheMode --- .../network/packet/server/CachedPacket.java | 6 +----- .../network/player/PlayerSocketConnection.java | 15 +++++---------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java b/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java index 4571d5c58..aac9c9a52 100644 --- a/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java @@ -5,7 +5,6 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.lang.invoke.VarHandle; import java.lang.ref.SoftReference; import java.nio.ByteBuffer; import java.util.function.Supplier; @@ -20,7 +19,7 @@ import java.util.function.Supplier; @ApiStatus.Internal public final class CachedPacket implements SendablePacket { private final Supplier packetSupplier; - private SoftReference packet; + private volatile SoftReference packet; public CachedPacket(@NotNull Supplier<@NotNull ServerPacket> packetSupplier) { this.packetSupplier = packetSupplier; @@ -32,7 +31,6 @@ public final class CachedPacket implements SendablePacket { public void invalidate() { this.packet = null; - VarHandle.releaseFence(); } public @NotNull ServerPacket packet() { @@ -48,13 +46,11 @@ public final class CachedPacket implements SendablePacket { private @Nullable FramedPacket updatedCache() { if (!PacketUtils.CACHED_PACKET) return null; - VarHandle.acquireFence(); SoftReference ref = packet; FramedPacket cache; if (ref == null || (cache = ref.get()) == null) { cache = PacketUtils.allocateTrimmedPacket(packetSupplier.get()); this.packet = new SoftReference<>(cache); - VarHandle.releaseFence(); } return cache; } diff --git a/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java index 8fe49588d..b744543c1 100644 --- a/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java @@ -413,18 +413,13 @@ public class PlayerSocketConnection extends PlayerConnection { } public void flushSync() throws IOException { + final SocketChannel channel = this.channel; + final List waitingBuffers = this.waitingBuffers; + if (!channel.isConnected()) throw new ClosedChannelException(); + // Fast exit if the tick buffer can be reused if (waitingBuffers.isEmpty() && tickBuffer.getPlain().writeChannel(channel)) - return; // Fast exit if the tick buffer can be reused - - try { - updateLocalBuffer(); - } catch (OutOfMemoryError e) { - this.waitingBuffers.clear(); - System.gc(); // Explicit gc forcing buffers to be collected - throw new ClosedChannelException(); - } - + return; // Write as much as possible from the waiting list Iterator iterator = waitingBuffers.iterator(); while (iterator.hasNext()) {