3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-11-08 17:20:24 +01:00

Directly add dependent futures to the list instead of waiting for the extra boolean

Dieser Commit ist enthalten in:
KennyTV 2020-04-24 13:48:22 +02:00
Ursprung e4bac5f81a
Commit 24ebb77860
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 6BE3B555EBC5982B
2 geänderte Dateien mit 8 neuen und 13 gelöschten Zeilen

Datei anzeigen

@ -6,7 +6,6 @@ import com.google.gson.JsonIOException;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException; import com.google.gson.JsonSyntaxException;
import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
import us.myles.ViaVersion.util.GsonUtil; import us.myles.ViaVersion.util.GsonUtil;
import java.io.File; import java.io.File;
@ -34,7 +33,6 @@ public class MappingDataLoader {
public static void enableMappingsCache() { public static void enableMappingsCache() {
cacheJsonMappings = true; cacheJsonMappings = true;
ProtocolRegistry.setKeepExecutorLoaded(true);
} }
/** /**

Datei anzeigen

@ -61,7 +61,6 @@ public class ProtocolRegistry {
private static Map<Class<? extends Protocol>, CompletableFuture<Void>> mappingLoaderFutures = new HashMap<>(); private static Map<Class<? extends Protocol>, CompletableFuture<Void>> mappingLoaderFutures = new HashMap<>();
private static ThreadPoolExecutor mappingLoaderExecutor; private static ThreadPoolExecutor mappingLoaderExecutor;
private static boolean mappingsLoaded; private static boolean mappingsLoaded;
private static boolean keepExecutorLoaded;
static { static {
mappingLoaderExecutor = new ThreadPoolExecutor(5, 16, 45L, TimeUnit.SECONDS, new SynchronousQueue<>()); mappingLoaderExecutor = new ThreadPoolExecutor(5, 16, 45L, TimeUnit.SECONDS, new SynchronousQueue<>());
@ -329,7 +328,7 @@ public class ProtocolRegistry {
*/ */
public static boolean checkForMappingCompletion() { public static boolean checkForMappingCompletion() {
synchronized (MAPPING_LOADER_LOCK) { synchronized (MAPPING_LOADER_LOCK) {
if (mappingsLoaded || keepExecutorLoaded) return false; if (mappingsLoaded) return false;
for (CompletableFuture<Void> future : mappingLoaderFutures.values()) { for (CompletableFuture<Void> future : mappingLoaderFutures.values()) {
// Return if any future hasn't completed yet // Return if any future hasn't completed yet
@ -361,19 +360,17 @@ public class ProtocolRegistry {
} }
} }
public static void addMappingLoaderFuture(Class<? extends Protocol> protocolClass, Class<? extends Protocol> dependsOn, Runnable runnable) {
synchronized (MAPPING_LOADER_LOCK) {
CompletableFuture<Void> future = getMappingLoaderFuture(dependsOn).whenCompleteAsync((v, throwable) -> runnable.run(), mappingLoaderExecutor);
mappingLoaderFutures.put(protocolClass, future);
}
}
public static CompletableFuture<Void> getMappingLoaderFuture(Class<? extends Protocol> protocolClass) { public static CompletableFuture<Void> getMappingLoaderFuture(Class<? extends Protocol> protocolClass) {
synchronized (MAPPING_LOADER_LOCK) { synchronized (MAPPING_LOADER_LOCK) {
if (mappingsLoaded) return null; if (mappingsLoaded) return null;
return mappingLoaderFutures.get(protocolClass); return mappingLoaderFutures.get(protocolClass);
} }
} }
/**
* If set to true, the executor and mappings will stay loaded, even if all current futures have been completed.
*
* @param keepExecutorLoaded whether to keep the executor and mappings loaded, even if all current futures have been completed
*/
public static void setKeepExecutorLoaded(boolean keepExecutorLoaded) {
ProtocolRegistry.keepExecutorLoaded = keepExecutorLoaded;
}
} }