[ci skip] Avoid call currentThread() twice on ensures pakcet safety
This commit is contained in:
15
src/main/java/net/minecraft/server/IAsyncTaskHandler.java
Normal file
15
src/main/java/net/minecraft/server/IAsyncTaskHandler.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
public interface IAsyncTaskHandler {
|
||||
|
||||
ListenableFuture<Object> postToMainThread(Runnable runnable);
|
||||
|
||||
boolean isMainThread();
|
||||
// Akarin start
|
||||
public default void ensuresMainThread(Runnable runnable) {
|
||||
postToMainThread(runnable);
|
||||
}
|
||||
// Akarin end
|
||||
}
|
||||
@@ -1681,7 +1681,7 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
||||
if (!this.isMainThread()) { // CraftBukkit && !this.isStopped()) {
|
||||
ListenableFutureTask<V> listenablefuturetask = ListenableFutureTask.create(callable);
|
||||
|
||||
this.f.add(listenablefuturetask);
|
||||
this.f.offer(listenablefuturetask); // Akarin - add -> offer
|
||||
return listenablefuturetask;
|
||||
} else {
|
||||
try {
|
||||
@@ -1691,6 +1691,12 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
||||
}
|
||||
}
|
||||
}
|
||||
// Akarin start
|
||||
@Override
|
||||
public void ensuresMainThread(Runnable runnable) {
|
||||
this.f.offer(ListenableFutureTask.create(runnable, null));
|
||||
}
|
||||
// Akarin end
|
||||
|
||||
public ListenableFuture<Object> postToMainThread(Runnable runnable) {
|
||||
Validate.notNull(runnable);
|
||||
|
||||
@@ -9,7 +9,7 @@ public class PlayerConnectionUtils {
|
||||
if (!iasynctaskhandler.isMainThread()) {
|
||||
Timing timing = MinecraftTimings.getPacketTiming(packet); // Paper
|
||||
|
||||
iasynctaskhandler.postToMainThread(() -> {
|
||||
iasynctaskhandler.ensuresMainThread(() -> {
|
||||
if (t0 instanceof PlayerConnection && ((PlayerConnection) t0).processedDisconnect) return; // CraftBukkit
|
||||
try (Timing ignored = timing.startTiming()) { // Paper
|
||||
packet.a(t0);
|
||||
|
||||
@@ -4,6 +4,8 @@ import co.aikar.timings.Timings;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.google.common.util.concurrent.ListenableFutureTask;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -1269,6 +1271,12 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
public ListenableFuture<Object> postToMainThread(Runnable runnable) {
|
||||
return this.server.postToMainThread(runnable);
|
||||
}
|
||||
// Akarin start
|
||||
@Override
|
||||
public void ensuresMainThread(Runnable runnable) {
|
||||
this.server.f.offer(ListenableFutureTask.create(runnable, null));
|
||||
}
|
||||
// Akarin end
|
||||
|
||||
public boolean isMainThread() {
|
||||
return this.server.isMainThread();
|
||||
|
||||
Reference in New Issue
Block a user