From 7ca29c8651d369ec96cf3e5ac75c9ea15bde7f41 Mon Sep 17 00:00:00 2001 From: Matthias Arzt <arzt@mpi-cbg.de> Date: Fri, 4 Sep 2020 16:45:33 +0200 Subject: [PATCH] Fix memory leak: PainterThread shouldn't hold a reference to ViewerPanel --- src/main/java/bdv/viewer/ViewerPanel.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/bdv/viewer/ViewerPanel.java b/src/main/java/bdv/viewer/ViewerPanel.java index 61259283..6a1fc49b 100644 --- a/src/main/java/bdv/viewer/ViewerPanel.java +++ b/src/main/java/bdv/viewer/ViewerPanel.java @@ -260,7 +260,7 @@ public class ViewerPanel extends JPanel implements OverlayRenderer, PainterThrea renderingExecutorService = Executors.newFixedThreadPool( options.getNumRenderingThreads(), - new RenderThreadFactory() ); + new RenderThreadFactory(threadGroup) ); imageRenderer = new MultiResolutionRenderer( renderTarget, painterThread, options.getScreenScales(), @@ -1153,14 +1153,21 @@ public class ViewerPanel extends JPanel implements OverlayRenderer, PainterThrea protected static final AtomicInteger panelNumber = new AtomicInteger( 1 ); - protected class RenderThreadFactory implements ThreadFactory + protected static class RenderThreadFactory implements ThreadFactory { + private ThreadGroup threadGroup; + private final String threadNameFormat = String.format( "bdv-panel-%d-thread-%%d", panelNumber.getAndIncrement() ); private final AtomicInteger threadNumber = new AtomicInteger( 1 ); + protected RenderThreadFactory( final ThreadGroup threadGroup ) + { + this.threadGroup = threadGroup; + } + @Override public Thread newThread( final Runnable r ) { -- GitLab