화요일, 12월 02, 2008

org.eclipse.ui.console.MessageConsole의 버그

org.eclipse.ui.console.MessageConsole의 hang현상

현재 ui가 hang이 걸리는 것은

IOConsolePartitioner.streamAppended(?, ?)의
if (fBuffer > 160000) {
try {
pendingPartitions.wait();
} catch (InterruptedException e) {
}
}

코드 때문입니다.

이것은 ui가 죽지 않도록 하기위해 정기적으로 fBuffer를 초기화해주는데, 초기화 해주지 못해서(ui가 바쁘거나 기타이유로)
wait현상이 일어 나서 그렇습니다.
(mccs console이 처음 시작할때는 잘 가져오는데, 두번째에서 에러나는것은 디버그를 해보고, clearBuffer() 메소드를 호출해 보았지만... 역시나 되지 않네요)

이클립스 버그로도 등록되어 있습니다.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=136943

위의 내용중에 그나마 해결책으로 나온 코드를 우선 적용해 놓았습니다.
다른 코드도 바꾸어야 겠습니다.

LogConsoleWriter.java

synchronized public void write(final String data,final Level level) throws IOException{

/**
* 임시 방편으로 죽지 않도록 수 정했음.
*
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=136943
*/
new Thread(new Runnable() {
public void run() {
try {
streams.get(level).write(data + "\r");
} catch(Exception e) {
e.printStackTrace();
}
}
}).start();

}


제 생각에는 ?가 로그를 가지고 올때 전체를 가져오는 것보다는 마지막 로그 전 대략 200byte정도만 가져와서 보여주면 어떨까 싶습니다.

이전 로그를 보여주어야 한다면, 로그를 보여줄수 있는 viewer를 만들어서 보여주는 것이 어떨까 싶습니다.

수고하세요.

==================
하루종일 디버깅하고 에러 찾기를 한 결과.
가끔 이클립스가 행걸리고 죽는것도 저것때문이 아닌가 싶다. 추측만......

댓글 없음:

댓글 쓰기