From 7d0f0c8ecfb3cccf11435db2c18b439680989588 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Tue, 27 Nov 2012 06:44:54 -0500 Subject: [PATCH] Bug 394766: MIInferiorProcess leaks 2x LargePipedInputStreams after a restart --- .../mi/service/command/MIInferiorProcess.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java index 57c4a6c0433..ad8319ada7c 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java @@ -77,13 +77,13 @@ public class MIInferiorProcess extends Process // Indicates that the inferior has been terminated private boolean fTerminated; - private final OutputStream fOutputStream; - private final InputStream fInputStream; + private OutputStream fOutputStream; + private InputStream fInputStream; - private final PipedOutputStream fInputStreamPiped; + private PipedOutputStream fInputStreamPiped; - private final PipedInputStream fErrorStream; - private final PipedOutputStream fErrorStreamPiped; + private PipedInputStream fErrorStream; + private PipedOutputStream fErrorStreamPiped; private final DsfSession fSession; @@ -328,19 +328,29 @@ public class MIInferiorProcess extends Process private void closeIO() { try { - fOutputStream.close(); + if (fOutputStream != null) fOutputStream.close(); + // Make sure things get GCed + fOutputStream = null; } catch (IOException e) {} try { - fInputStream.close(); + if (fInputStream != null) fInputStream.close(); + // Make sure things get GCed + fInputStream = null; } catch (IOException e) {} try { if (fInputStreamPiped != null) fInputStreamPiped.close(); + // Make sure things get GCed + fInputStreamPiped = null; } catch (IOException e) {} try { - fErrorStream.close(); + if (fErrorStream != null) fErrorStream.close(); + // Make sure things get GCed + fErrorStream = null; } catch (IOException e) {} try { - fErrorStreamPiped.close(); + if (fErrorStreamPiped != null) fErrorStreamPiped.close(); + // Make sure things get GCed + fErrorStreamPiped = null; } catch (IOException e) {} }