From de2b204646c1c1e531d78bf991bb1740e46846b9 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Tue, 6 Mar 2012 14:02:12 +0000 Subject: [PATCH] * viewstat.jsp: Properly close the ImageOutputStream to fix NPEs in the finalizer, probably was the root cause of what we blamed on Jetty --- .../java/src/net/i2p/router/web/StatSummarizer.java | 6 +++++- .../java/src/net/i2p/router/web/SummaryRenderer.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java index bbb03d2e8b..e8cd7e17b5 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java @@ -304,6 +304,7 @@ public class StatSummarizer implements Runnable { long period = 60*1000; long start = end - period*periodCount; //long begin = System.currentTimeMillis(); + ImageOutputStream ios = null; try { RrdGraphDef def = new RrdGraphDef(); def.setTimeSpan(start/1000, end/1000); @@ -356,7 +357,7 @@ public class StatSummarizer implements Runnable { BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB); Graphics gfx = img.getGraphics(); graph.render(gfx); - ImageOutputStream ios = new MemoryCacheImageOutputStream(out); + ios = new MemoryCacheImageOutputStream(out); ImageIO.write(img, "png", ios); //File t = File.createTempFile("jrobinData", ".xml"); @@ -373,6 +374,9 @@ public class StatSummarizer implements Runnable { } catch (OutOfMemoryError oom) { _log.error("Error rendering", oom); throw new IOException("Error plotting: " + oom.getMessage()); + } finally { + // this does not close the underlying stream + if (ios != null) try {ios.close();} catch (IOException ioe) {} } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java index a0349aa711..2e0c44fed1 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java @@ -99,6 +99,7 @@ class SummaryRenderer { periodCount = _listener.getRows(); long start = end - (period * periodCount); //long begin = System.currentTimeMillis(); + ImageOutputStream ios = null; try { RrdGraphDef def = new RrdGraphDef(); def.setTimeSpan(start/1000, end/1000); @@ -186,7 +187,7 @@ class SummaryRenderer { BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB); Graphics gfx = img.getGraphics(); graph.render(gfx); - ImageOutputStream ios = new MemoryCacheImageOutputStream(out); + ios = new MemoryCacheImageOutputStream(out); ImageIO.write(img, "png", ios); //System.out.println("Graph created"); @@ -203,6 +204,9 @@ class SummaryRenderer { } catch (OutOfMemoryError oom) { _log.error("Error rendering", oom); throw new IOException("Error plotting: " + oom.getMessage()); + } finally { + // this does not close the underlying stream + if (ios != null) try {ios.close();} catch (IOException ioe) {} } } -- GitLab