private boolean skipLF = false;
private boolean myIsClosed = false;
- volatile private boolean myIsProcessTerminated = false;
+ private volatile boolean myIsProcessTerminated = false;
private final Semaphore mySemaphore = new Semaphore();
private final BlockingQueue<String> myNotificationQueue = new LinkedBlockingQueue<String>();
@Override
public void run() {
while (true) {
- final ReadProcessRequest request = takeRequest();
+ ReadProcessRequest request = takeRequest();
if (request == null) return;
processRequest(request);
if (!request.isClosed()) addRequest(request);
+ //noinspection UnusedAssignment
+ request = null; //leak?
+
try {
Thread.sleep(1L);
}
* {@inheritDoc}
*/
protected void startHandlingStreams() {
- myHandler = new OSProcessHandler(myProcess, myCommandLine.getCommandLineString()) {
- @Override
- public Charset getCharset() {
- Charset charset = GitTextHandler.this.getCharset();
- return charset == null ? super.getCharset() : charset;
- }
- };
+ myHandler = new MyOSProcessHandler(myProcess, myCommandLine.getCommandLineString(), getCharset());
myHandler.addProcessListener(new ProcessListener() {
public void startNotified(final ProcessEvent event) {
// do nothing
* {@inheritDoc}
*/
protected void waitForProcess() {
- myHandler.waitFor();
+ OSProcessHandler handler = myHandler;
myHandler = null;
+ handler.waitFor();
+ }
+
+ private static class MyOSProcessHandler extends OSProcessHandler {
+ private final Charset myCharset;
+
+ public MyOSProcessHandler(Process process, String commandLine, Charset charset) {
+ super(process, commandLine);
+ myCharset = charset;
+ }
+
+ @Override
+ public Charset getCharset() {
+ Charset charset = myCharset;
+ return charset == null ? super.getCharset() : charset;
+ }
}
}