Bug 41790 - JDTCompiler::getContents does not close the reader
JDTCompiler::getContents does not close the reader
Product: Tomcat 5
Classification: Unclassified
Component: Jasper
Other Linux
: P2 normal (vote)
: ---
Assigned To: Tomcat Developers Mailing List
Depends on:
  Show dependency tree
Reported: 2007-03-07 19:02 UTC by junwei.cheng
Modified: 2007-03-08 08:05 UTC (History)
1 user (show)


Note You need to log in before you can comment on or make changes to this bug.
Description junwei.cheng 2007-03-07 19:02:57 UTC
In the class org.apache.jasper.compiler.JDTCompiler:
public char[] getContents() {
                char[] result = null;
                try {
                    InputStreamReader isReader =
                        new InputStreamReader(new FileInputStream(sourceFile),
                    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 
Comment 1 Sven 2007-03-07 19:39:51 UTC
Both the FileInputStream and the InputStreamReader should be closed within a
finally block.
Comment 2 Remy Maucherat 2007-03-08 08:05:04 UTC
Only the FileInputStream needs to be closed (the others are irrelevant).