diff --git a/src/main/java/com/replaymod/render/rendering/Pipeline.java b/src/main/java/com/replaymod/render/rendering/Pipeline.java index 6e1de408..e5296e8d 100644 --- a/src/main/java/com/replaymod/render/rendering/Pipeline.java +++ b/src/main/java/com/replaymod/render/rendering/Pipeline.java @@ -30,7 +30,7 @@ public class Pipeline implements Runnable { private final Object consumerLock = new Object(); private final FrameConsumer

consumer; - private Thread runningThread; + private volatile boolean abort; public Pipeline(FrameCapturer capturer, FrameProcessor processor, FrameConsumer

consumer) { this.capturer = capturer; @@ -40,7 +40,6 @@ public class Pipeline implements Runnable { @Override public synchronized void run() { - runningThread = Thread.currentThread(); consumerNextFrame = 0; int processors = Runtime.getRuntime().availableProcessors(); int processThreads = Math.max(1, processors - 2); // One processor for the main thread and one for ffmpeg, sorry OS :( @@ -60,13 +59,13 @@ public class Pipeline implements Runnable { }, new ThreadPoolExecutor.DiscardPolicy()); MinecraftClient mc = MCVer.getMinecraft(); - while (!capturer.isDone() && !Thread.currentThread().isInterrupted()) { + while (!capturer.isDone() && !abort) { //#if MC>=11400 if (GLFW.glfwWindowShouldClose(getWindow(mc).getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) { //#else //$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).getCrashReporter() != null) { //#endif - Thread.currentThread().interrupt(); + processService.shutdown(); return; } R rawFrame = capturer.process(); @@ -93,9 +92,7 @@ public class Pipeline implements Runnable { } public void cancel() { - if (runningThread != null) { - runningThread.interrupt(); - } + abort = true; } @RequiredArgsConstructor