Migrated ResourceRunnable to use PoorMansLock
This commit is contained in:
@@ -5,13 +5,12 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import mc.core.events.api.EventQueueOwner;
|
import mc.core.events.api.EventQueueOwner;
|
||||||
|
import mc.core.events.lock.LockObserveList;
|
||||||
import mc.core.events.runner.EventExecutorService;
|
import mc.core.events.runner.EventExecutorService;
|
||||||
import mc.core.events.runner.ResourceRunnable;
|
import mc.core.events.runner.ResourceRunnable;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
@@ -41,7 +40,7 @@ public class EventPipelineTask {
|
|||||||
|
|
||||||
RegisteredEventHandler handler = handlers.get(currentIndex);
|
RegisteredEventHandler handler = handlers.get(currentIndex);
|
||||||
if (!event.isCanceled() || !handler.isIgnoreCancelled()) {
|
if (!event.isCanceled() || !handler.isIgnoreCancelled()) {
|
||||||
List<Lock> locks = getLocks(handler);
|
LockObserveList locks = getLocks(handler);
|
||||||
|
|
||||||
service.addTask(new ResourceRunnable() {
|
service.addTask(new ResourceRunnable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -60,7 +59,7 @@ public class EventPipelineTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Lock> getLocks() {
|
public LockObserveList getLocks() {
|
||||||
return locks;
|
return locks;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -70,12 +69,14 @@ public class EventPipelineTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Lock> getLocks(RegisteredEventHandler handler) {
|
private LockObserveList getLocks(RegisteredEventHandler handler) {
|
||||||
List<Lock> locks = new ArrayList<>();
|
LockObserveList locks = new LockObserveList();
|
||||||
|
/*
|
||||||
|
|
||||||
if (handler.isPluginSynchronize())
|
if (handler.isPluginSynchronize())
|
||||||
locks.add(manager.getResourceManager().getPluginLock(handler.getPlugin()));
|
locks.add(manager.getResourceManager().getPluginLock(handler.getPlugin()));
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
return locks;
|
return locks;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class LockObserveList implements Consumer<PoorMansLock> {
|
public class LockObserveList implements Consumer<PoorMansLock> {
|
||||||
|
public static LockObserveList EMPTY_LIST = new LockObserveList();
|
||||||
private List<PoorMansLock> locks = new ArrayList<>();
|
private List<PoorMansLock> locks = new ArrayList<>();
|
||||||
private Runnable callback;
|
private Runnable callback;
|
||||||
|
|
||||||
@@ -32,6 +33,16 @@ public class LockObserveList implements Consumer<PoorMansLock> {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void lockAll() {
|
||||||
|
for (PoorMansLock lock : locks)
|
||||||
|
lock.lock();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unlockAll() {
|
||||||
|
for (PoorMansLock lock : locks)
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(PoorMansLock lock) {
|
public void accept(PoorMansLock lock) {
|
||||||
if (!lock.isLocked()) {
|
if (!lock.isLocked()) {
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package mc.core.events.runner;
|
package mc.core.events.runner;
|
||||||
|
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
|
|
||||||
public class ExecutorThread extends Thread {
|
public class ExecutorThread extends Thread {
|
||||||
private EventExecutorService service;
|
private EventExecutorService service;
|
||||||
|
|
||||||
@@ -25,15 +23,12 @@ public class ExecutorThread extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void executeTask(ResourceRunnable runnable) {
|
void executeTask(ResourceRunnable runnable) {
|
||||||
for (Lock lock : runnable.getLocks()) {
|
runnable.getLocks().lockAll();
|
||||||
lock.lock();
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
runnable.run();
|
runnable.run();
|
||||||
} finally {
|
} finally {
|
||||||
for (Lock lock : runnable.getLocks()) {
|
runnable.getLocks().unlockAll();
|
||||||
lock.unlock();
|
runnable.getLocks().release();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
runnable.after();
|
runnable.after();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
package mc.core.events.runner;
|
package mc.core.events.runner;
|
||||||
|
|
||||||
import java.util.Collections;
|
import mc.core.events.lock.LockObserveList;
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
|
|
||||||
public interface ResourceRunnable extends Runnable {
|
public interface ResourceRunnable extends Runnable {
|
||||||
default List<Lock> getLocks() {
|
default LockObserveList getLocks() {
|
||||||
return Collections.emptyList();
|
return LockObserveList.EMPTY_LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
default void after() {
|
default void after() {
|
||||||
|
|||||||
Reference in New Issue
Block a user