diff --git a/src/main/java/electrosphere/engine/threads/ThreadManager.java b/src/main/java/electrosphere/engine/threads/ThreadManager.java index 8efea554..ff89d21a 100644 --- a/src/main/java/electrosphere/engine/threads/ThreadManager.java +++ b/src/main/java/electrosphere/engine/threads/ThreadManager.java @@ -12,7 +12,9 @@ import electrosphere.engine.loadingthreads.LoadingThread; import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.types.terrain.BlockChunkEntity; import electrosphere.entity.types.terrain.TerrainChunk; +import electrosphere.server.ai.services.PathfindingService; import electrosphere.server.datacell.Realm; +import electrosphere.server.datacell.gridded.GriddedDataCellLoaderService; import electrosphere.util.CodeUtils; /** @@ -134,9 +136,8 @@ public class ThreadManager { TerrainChunk.haltThreads(); FoliageModel.haltThreads(); BlockChunkEntity.haltThreads(); - if(Globals.aiManager != null && Globals.aiManager.getPathfindingService() != null){ - Globals.aiManager.getPathfindingService().shutdown(); - } + GriddedDataCellLoaderService.haltThreads(); + PathfindingService.haltThreads(); // //interrupt all threads diff --git a/src/main/java/electrosphere/server/ai/services/PathfindingService.java b/src/main/java/electrosphere/server/ai/services/PathfindingService.java index 5c47d96f..abe26355 100644 --- a/src/main/java/electrosphere/server/ai/services/PathfindingService.java +++ b/src/main/java/electrosphere/server/ai/services/PathfindingService.java @@ -19,7 +19,7 @@ public class PathfindingService implements AIService { /** * The executor service */ - ExecutorService executorService; + static final ExecutorService executorService = Executors.newFixedThreadPool(ThreadCounts.PATHFINDING_THREADS); /** * Queues a pathfinding job @@ -31,9 +31,6 @@ public class PathfindingService implements AIService { */ public PathingProgressiveData queuePathfinding(Vector3d start, Vector3d end, VoxelPathfinder pathfinder, VoxelCellManager voxelCellManager){ PathingProgressiveData rVal = new PathingProgressiveData(end); - if(executorService == null){ - executorService = Executors.newFixedThreadPool(ThreadCounts.PATHFINDING_THREADS); - } executorService.submit(() -> { List points = pathfinder.findPath(voxelCellManager, start, end, VoxelPathfinder.DEFAULT_MAX_COST); points.add(end); @@ -50,10 +47,13 @@ public class PathfindingService implements AIService { @Override public void shutdown() { - if(executorService != null){ - executorService.shutdownNow(); - } - executorService = null; + } + + /** + * Halts all threads in the pathfinding service + */ + public static void haltThreads(){ + executorService.shutdownNow(); } } diff --git a/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellLoaderService.java b/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellLoaderService.java index 83de24a7..97d18f12 100644 --- a/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellLoaderService.java +++ b/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellLoaderService.java @@ -92,5 +92,12 @@ public class GriddedDataCellLoaderService { queuedWorkLock.put(key, newJob); lock.unlock(); } + + /** + * Halts the threads for the data cell loader service + */ + public static void haltThreads(){ + ioThreadService.shutdownNow(); + } }