Might have fixed the stop delay
The theory is the following: multiple BS threads were created, one for each chunk, which caused long locks. If this isn't the case, I don't know what is. #2
This commit is contained in:
parent
b84ecf8545
commit
cd7b7a550d
1 changed files with 17 additions and 13 deletions
|
@ -1,22 +1,21 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.blockstate.thread;
|
package de.jaschastarke.minecraft.limitedcreative.blockstate.thread;
|
||||||
|
|
||||||
|
import de.jaschastarke.bukkit.lib.ModuleLogger;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.AbstractModel.HasBlockState;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cuboid;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBQueries;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.ThreadedModel;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
|
||||||
import java.lang.Thread.UncaughtExceptionHandler;
|
import java.lang.Thread.UncaughtExceptionHandler;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.ModuleLogger;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.AbstractModel.HasBlockState;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cuboid;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBQueries;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.ThreadedModel;
|
|
||||||
|
|
||||||
public class ThreadLink {
|
public class ThreadLink {
|
||||||
private static final int BATCH_ACTION_LENGTH = 25;
|
private static final int BATCH_ACTION_LENGTH = 25;
|
||||||
private static final int QUEUE_ACCESS_WARNING_DURATION = 5; // ms
|
private static final int QUEUE_ACCESS_WARNING_DURATION = 5; // ms
|
||||||
|
@ -40,6 +39,7 @@ public class ThreadLink {
|
||||||
* In theory we could add multiple threads, e.g. 1 write and 2 read threads.
|
* In theory we could add multiple threads, e.g. 1 write and 2 read threads.
|
||||||
*/
|
*/
|
||||||
createThread(queries);
|
createThread(queries);
|
||||||
|
shutdown = true; //Don't allow the thread to run until it's started
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DBThread extends Thread {
|
private class DBThread extends Thread {
|
||||||
|
@ -108,6 +108,7 @@ public class ThreadLink {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
|
shutdown = false;
|
||||||
if (!thread.isAlive())
|
if (!thread.isAlive())
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
@ -213,14 +214,17 @@ public class ThreadLink {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restartThreadIfNeeded() {
|
private void restartThreadIfNeeded() {
|
||||||
if(thread.isAlive())
|
if ((thread != null && thread.isAlive()) || shutdown)
|
||||||
return;
|
return;
|
||||||
log.warn("Thread is dead, restarting!");
|
log.warn("Thread is dead, restarting!");
|
||||||
|
new Exception("Thread-restarting update called").printStackTrace();
|
||||||
createThread(((DBThread) thread).q);
|
createThread(((DBThread) thread).q);
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createThread(DBQueries queries) {
|
private void createThread(DBQueries queries) {
|
||||||
|
if (shutdown)
|
||||||
|
return;
|
||||||
thread = new DBThread(queries);
|
thread = new DBThread(queries);
|
||||||
thread.setName("LC BlockState DB-Thread");
|
thread.setName("LC BlockState DB-Thread");
|
||||||
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
|
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
|
||||||
|
|
Loading…
Reference in a new issue