Try fixing lock acquiring issue in extra task optimizations
This commit is contained in:
@@ -31,17 +31,10 @@ index 8197ccb1c4e5878dbd8007b5fb514640765ec8e4..81db3c6f330729cb353b198badc86fe2
|
||||
return;
|
||||
}
|
||||
diff --git a/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java b/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java
|
||||
index ce388e0ef231d7d73f75f5778c58eb40f6402f0f..bba0d3b572cf9aa7c03816c0a74b7579b2280210 100644
|
||||
index ce388e0ef231d7d73f75f5778c58eb40f6402f0f..7f8473a6db78dc652e0ccfdb7cc038126f1e61ea 100644
|
||||
--- a/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java
|
||||
+++ b/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java
|
||||
@@ -676,13 +676,13 @@ public final class ThreadedRegionizer<R extends ThreadedRegionizer.ThreadedRegio
|
||||
private static final AtomicLong REGION_ID_GENERATOR = new AtomicLong();
|
||||
|
||||
private static final int STATE_TRANSIENT = 0;
|
||||
- private static final int STATE_READY = 1;
|
||||
+ public static final int STATE_READY = 1; // Luminol - Optimize task dispatching
|
||||
private static final int STATE_TICKING = 2;
|
||||
private static final int STATE_DEAD = 3;
|
||||
@@ -682,7 +682,7 @@ public final class ThreadedRegionizer<R extends ThreadedRegionizer.ThreadedRegio
|
||||
|
||||
public final long id;
|
||||
|
||||
@@ -51,27 +44,20 @@ index ce388e0ef231d7d73f75f5778c58eb40f6402f0f..bba0d3b572cf9aa7c03816c0a74b7579
|
||||
private final Long2ReferenceOpenHashMap<ThreadedRegionSection<R, S>> sectionByKey = new Long2ReferenceOpenHashMap<>();
|
||||
private final ReferenceOpenHashSet<ThreadedRegionSection<R, S>> deadSections = new ReferenceOpenHashSet<>();
|
||||
diff --git a/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java b/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java
|
||||
index c43b263e6502ba48a876803385f8d05c5e84ba3e..0197be1de64afbcda4897a8613e999239b90133a 100644
|
||||
index c43b263e6502ba48a876803385f8d05c5e84ba3e..bfabe758e61e196fd9f4abb3ee793ef3be420c6d 100644
|
||||
--- a/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java
|
||||
+++ b/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java
|
||||
@@ -357,6 +357,54 @@ public final class TickRegionScheduler {
|
||||
@@ -357,6 +357,47 @@ public final class TickRegionScheduler {
|
||||
return !this.markNotTicking() || this.cancelled.get() ? null : Boolean.valueOf(ret);
|
||||
}
|
||||
|
||||
+ @Override
|
||||
+ public boolean flushExtraTask(){
|
||||
+ if (this.region != null && this.region.region.state != ThreadedRegionizer.ThreadedRegion.STATE_READY){
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (this.cancelled.get()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (!this.tryMarkTicking()) {
|
||||
+ if (!this.cancelled.get()) {
|
||||
+ throw new IllegalStateException("Scheduled region should be acquirable");
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
|
||||
Reference in New Issue
Block a user