[ci skip] Avoid call currentThread() twice on ensures pakcet safety

This commit is contained in:
Sotr
2019-03-18 19:55:38 +08:00
parent 7a3490a487
commit ccbe5f8f93
4 changed files with 31 additions and 2 deletions

View 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
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();