mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Avoid dead-lock reading debugger output: close InputStream while blocking read from StreamReader, don't close StreamReader.
This commit is contained in:
@@ -22,7 +22,10 @@ import com.jetbrains.python.debugger.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketException;
|
||||
@@ -473,20 +476,18 @@ public class RemoteDebugger implements ProcessDebugger {
|
||||
|
||||
public DebuggerReader createReader(@NotNull Socket socket) throws IOException {
|
||||
synchronized (mySocketObject) {
|
||||
final InputStream myInputStream = socket.getInputStream();
|
||||
//noinspection IOResourceOpenedButNotSafelyClosed
|
||||
final Reader reader = new InputStreamReader(myInputStream, CharsetToolkit.UTF8_CHARSET); //TODO: correct econding?
|
||||
return new DebuggerReader(reader);
|
||||
return new DebuggerReader(socket.getInputStream());
|
||||
}
|
||||
}
|
||||
|
||||
private class DebuggerReader extends BaseOutputReader {
|
||||
private Reader myReader;
|
||||
private StringBuilder myTextBuilder = new StringBuilder();
|
||||
private final InputStream myInputStream;
|
||||
|
||||
private DebuggerReader(final Reader reader) throws IOException {
|
||||
super(reader);
|
||||
myReader = reader;
|
||||
private DebuggerReader(final InputStream stream) throws IOException {
|
||||
super(new InputStreamReader(stream, CharsetToolkit.UTF8_CHARSET)); //TODO: correct econding?);
|
||||
myInputStream = stream;
|
||||
start();
|
||||
}
|
||||
|
||||
@@ -609,21 +610,18 @@ public class RemoteDebugger implements ProcessDebugger {
|
||||
return ProtocolParser.parseThread(frame.getPayload(), myDebugProcess.getPositionConverter());
|
||||
}
|
||||
|
||||
private void closeReader(Reader reader) {
|
||||
try {
|
||||
reader.close();
|
||||
}
|
||||
catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Future<?> executeOnPooledThread(Runnable runnable) {
|
||||
return ApplicationManager.getApplication().executeOnPooledThread(runnable);
|
||||
}
|
||||
|
||||
public void close() {
|
||||
closeReader(myReader);
|
||||
try {
|
||||
myInputStream.close();
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user