mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 01:37:37 +00:00
Correctly queue edits
Synchronising on the LocalSession ends up being dangerous as it's a craftbukkit thread, leading to blocking issues if something goes wrong in an edit, made worse by the fact craftbukkit threads like to interfere with each other sometimes, and also cause OOMs and hanging when there are too many of them.
This commit is contained in:
parent
d10a5cc5fa
commit
cf0ff72524
@ -79,8 +79,8 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
|
||||
private final Map<String, Object> meta;
|
||||
|
||||
// Queue for async tasks
|
||||
private AtomicInteger runningCount = new AtomicInteger();
|
||||
private AsyncNotifyQueue asyncNotifyQueue = new AsyncNotifyQueue(
|
||||
private final AtomicInteger runningCount = new AtomicInteger();
|
||||
private final AsyncNotifyQueue asyncNotifyQueue = new AsyncNotifyQueue(
|
||||
(thread, throwable) -> {
|
||||
while (throwable.getCause() != null) {
|
||||
throwable = throwable.getCause();
|
||||
|
@ -189,12 +189,12 @@ public interface Actor extends Identifiable, SessionOwner, Subject, MapMetadatab
|
||||
*/
|
||||
default boolean confirm() {
|
||||
InterruptableCondition confirm = deleteMeta("cmdConfirm");
|
||||
if (confirm != null) {
|
||||
confirm.signal();;
|
||||
return true;
|
||||
}
|
||||
if (confirm == null) {
|
||||
return false;
|
||||
}
|
||||
queueAction(confirm::signal);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Queue an action to run async.
|
||||
|
@ -652,13 +652,12 @@ public final class PlatformCommandManager {
|
||||
} else {
|
||||
actor.decline();
|
||||
}
|
||||
LocalSession session = worldEdit.getSessionManager().get(actor);
|
||||
synchronized (session) {
|
||||
actor.runAction(() -> {
|
||||
SessionKey key = actor.getSessionKey();
|
||||
if (key.isActive()) {
|
||||
PlatformCommandManager.this.handleCommandOnCurrentThread(event);
|
||||
}
|
||||
}
|
||||
}, false, true);
|
||||
}, Fawe.isMainThread());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user