Project: Tomcat
Bug 41790 JDTCompiler::getContents does not close the reader
Reported: 2007-03-07 19:02:57 | Status: resolved fixed

In the class org.apache.jasper.compiler.JDTCompiler: ------------------------------------------------------------------------- public char[] getContents() { char[] result = null; try { InputStreamReader isReader = new InputStreamReader(new FileInputStream(sourceFile), ctxt.getOptions().getJavaEncoding()); Reader reader = new BufferedReader(isReader); if (reader != null) { char[] chars = new char[8192]; StringBuffer buf = new StringBuffer(); int count; while ((count = reader.read(chars, 0, chars.length)) > 0) { buf.append(chars, 0, count); } result = new char[buf.length()]; buf.getChars(0, result.length, result, 0); } } catch (IOException e) { log.error("Compilation error", e); } return result; } ------------------------------------------------------------------------- the variable "reader" is not closed after use it. if I update jsp files frequently, it will exhaust the system file handler. "too many files" errors will come. I test it on Redhat linux, the same problem will occured in tomcat 5 and tomcat 6.

Files changed in fix:
java/org/apache/jasper/compiler/JDTCompiler.java