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 extends Future super Void>>[] 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;