diff --git a/sources/pom.xml b/sources/pom.xml index 3d8feaaac..9470c5c28 100644 --- a/sources/pom.xml +++ b/sources/pom.xml @@ -133,6 +133,11 @@ mixin 0.7.10-SNAPSHOT + + com.googlecode.concurrent-locks + concurrent-locks + 1.0.0 + diff --git a/sources/src/main/java/io/akarin/api/internal/collections/CheckedConcurrentLinkedQueue.java b/sources/src/main/java/io/akarin/api/internal/utils/CheckedConcurrentLinkedQueue.java similarity index 99% rename from sources/src/main/java/io/akarin/api/internal/collections/CheckedConcurrentLinkedQueue.java rename to sources/src/main/java/io/akarin/api/internal/utils/CheckedConcurrentLinkedQueue.java index f9fbb5f64..976f7cb67 100644 --- a/sources/src/main/java/io/akarin/api/internal/collections/CheckedConcurrentLinkedQueue.java +++ b/sources/src/main/java/io/akarin/api/internal/utils/CheckedConcurrentLinkedQueue.java @@ -33,7 +33,7 @@ * at http://creativecommons.org/publicdomain/zero/1.0/ */ -package io.akarin.api.internal.collections; +package io.akarin.api.internal.utils; import java.util.AbstractQueue; import java.util.ArrayList; diff --git a/sources/src/main/java/io/akarin/api/internal/collections/WrappedCollections.java b/sources/src/main/java/io/akarin/api/internal/utils/WrappedCollections.java similarity index 99% rename from sources/src/main/java/io/akarin/api/internal/collections/WrappedCollections.java rename to sources/src/main/java/io/akarin/api/internal/utils/WrappedCollections.java index 52e812f63..fda965263 100644 --- a/sources/src/main/java/io/akarin/api/internal/collections/WrappedCollections.java +++ b/sources/src/main/java/io/akarin/api/internal/utils/WrappedCollections.java @@ -1,4 +1,4 @@ -package io.akarin.api.internal.collections; +package io.akarin.api.internal.utils; import java.io.Serializable; import java.io.ObjectOutputStream; diff --git a/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java b/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java index 24009def0..5cee7c39b 100644 --- a/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java +++ b/sources/src/main/java/io/akarin/server/mixin/nsc/OptimisticNetworkManager.java @@ -1,14 +1,14 @@ package io.akarin.server.mixin.nsc; import java.util.Queue; -import java.util.concurrent.locks.ReentrantReadWriteLock; - import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; -import io.akarin.api.internal.collections.CheckedConcurrentLinkedQueue; +import com.googlecode.concurentlocks.ReentrantReadWriteUpdateLock; + +import io.akarin.api.internal.utils.CheckedConcurrentLinkedQueue; import io.netty.channel.Channel; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; @@ -21,7 +21,7 @@ import net.minecraft.server.PacketPlayOutMapChunk; public abstract class OptimisticNetworkManager { @Shadow public Channel channel; @Shadow(aliases = "i") @Final private Queue packets; - @Shadow(aliases = "j") @Final private ReentrantReadWriteLock queueLock; + @Shadow(aliases = "j") @Final private ReentrantReadWriteUpdateLock queueLock; @Shadow public abstract Queue getPacketQueue(); @Shadow public abstract void dispatchPacket(Packet packet, GenericFutureListener>[] genericFutureListeners); @@ -36,7 +36,7 @@ public abstract class OptimisticNetworkManager { return true; } - this.queueLock.readLock().lock(); + this.queueLock.updateLock().lock(); try { while (!this.packets.isEmpty()) { NetworkManager.QueuedPacket packet = ((CheckedConcurrentLinkedQueue) getPacketQueue()).poll(item -> { @@ -52,7 +52,7 @@ public abstract class OptimisticNetworkManager { } } } finally { - this.queueLock.readLock().unlock(); + this.queueLock.updateLock().unlock(); } } diff --git a/sources/src/main/java/net/minecraft/server/NetworkManager.java b/sources/src/main/java/net/minecraft/server/NetworkManager.java index 3f8da6553..e0439887d 100644 --- a/sources/src/main/java/net/minecraft/server/NetworkManager.java +++ b/sources/src/main/java/net/minecraft/server/NetworkManager.java @@ -1,8 +1,9 @@ package net.minecraft.server; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.googlecode.concurentlocks.ReentrantReadWriteUpdateLock; -import io.akarin.api.internal.collections.CheckedConcurrentLinkedQueue; +import io.akarin.api.internal.utils.CheckedConcurrentLinkedQueue; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; @@ -75,7 +76,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { }; private final EnumProtocolDirection h; private final Queue i = new CheckedConcurrentLinkedQueue(); private final Queue getPacketQueue() { return this.i; } // Paper - Anti-Xray - OBFHELPER // Akarin - private final ReentrantReadWriteLock j = new ReentrantReadWriteLock(); + private final ReentrantReadWriteUpdateLock j = new ReentrantReadWriteUpdateLock(); // Akarin - use update lock public Channel channel; // Spigot Start // PAIL public SocketAddress l;