From 77e70ef8d33668f3456e73b9a554090749273b52 Mon Sep 17 00:00:00 2001 From: Luck Date: Sat, 22 Oct 2016 09:21:30 +0100 Subject: [PATCH] Fix deadlocks caused by waiting for async operations to complete before the scheduler has started --- .../luckperms/bukkit/LPBukkitPlugin.java | 6 +---- .../luckperms/bungee/LPBungeePlugin.java | 6 +---- .../common/storage/AbstractDatastore.java | 7 ++---- .../luckperms/common/storage/Datastore.java | 2 +- .../common/storage/SplitBacking.java | 22 +++++++------------ .../common/storage/StorageFactory.java | 2 +- .../common/storage/TolerantDatastore.java | 9 ++------ 7 files changed, 16 insertions(+), 38 deletions(-) diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index 774a645d..9b5df273 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -183,11 +183,7 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { // Run update task to refresh any online users getLog().info("Scheduling Update Task to refresh any online users."); - try { - new UpdateTask(this).run(); - } catch (Exception e) { - e.printStackTrace(); - } + updateTaskBuffer.request(); registerPermissions(getConfiguration().isCommandsAllowOp() ? PermissionDefault.OP : PermissionDefault.FALSE); if (!getConfiguration().isOpsEnabled()) { diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java index f0a3a2a5..534fe660 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java @@ -148,11 +148,7 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin { // Run update task to refresh any online users getLog().info("Scheduling Update Task to refresh any online users."); - try { - new UpdateTask(this).run(); - } catch (Exception e) { - e.printStackTrace(); - } + updateTaskBuffer.request(); getLog().info("Successfully loaded."); } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractDatastore.java b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractDatastore.java index bd1a2a21..48465c86 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractDatastore.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractDatastore.java @@ -83,11 +83,8 @@ public class AbstractDatastore implements Datastore { } @Override - public LPFuture init() { - return makeFuture(() -> { - backing.init(); - return null; - }); + public void init() { + backing.init(); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/Datastore.java b/common/src/main/java/me/lucko/luckperms/common/storage/Datastore.java index 6e209e93..f9a461e5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/Datastore.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/Datastore.java @@ -56,7 +56,7 @@ public interface Datastore { return this; } - LPFuture init(); + void init(); LPFuture shutdown(); LPFuture logAction(LogEntry entry); LPFuture getLog(); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/SplitBacking.java b/common/src/main/java/me/lucko/luckperms/common/storage/SplitBacking.java index a8c6eaea..c8164fcf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/SplitBacking.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/SplitBacking.java @@ -69,22 +69,16 @@ public class SplitBacking implements Datastore { } @Override - public LPFuture init() { - AbstractFuture future = new AbstractFuture<>(); - doAsync(() -> { - boolean success = true; - backing.values().forEach(Datastore::init); - for (Datastore ds : backing.values()) { - if (!ds.isAcceptingLogins()) { - success = false; - } + public void init() { + boolean success = true; + backing.values().forEach(Datastore::init); + for (Datastore ds : backing.values()) { + if (!ds.isAcceptingLogins()) { + success = false; } + } - setAcceptingLogins(success); - future.complete(null); - }); - return future; - + setAcceptingLogins(success); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java index 4f708be7..d138d5f0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java @@ -77,7 +77,7 @@ public class StorageFactory { } plugin.getLog().info("Initialising datastore..."); - datastore.init().getOrDefault(null); + datastore.init(); return datastore; } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/TolerantDatastore.java b/common/src/main/java/me/lucko/luckperms/common/storage/TolerantDatastore.java index 974a684a..891b35f8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/TolerantDatastore.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/TolerantDatastore.java @@ -75,13 +75,8 @@ public class TolerantDatastore implements Datastore { } @Override - public LPFuture init() { - phaser.register(); - try { - return backing.init(); - } finally { - phaser.arriveAndDeregister(); - } + public void init() { + backing.init(); } @Override