You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Renato <re...@yahoo.com> on 2004/08/30 19:43:24 UTC

[Patch] File descriptor leak in ManagerBase - please advise.

Hi all,

I running linux with tomcat 5.0.28. Today I have the
following error:

java.net.SocketException: Too many open files
        at java.net.Socket.createImpl(Socket.java:331)
        at java.net.Socket.<init>(Socket.java:304)
        at java.net.Socket.<init>(Socket.java:124)
(...)

By checking with 'lsof -p "tomcat_pid"', I saw that
there thousands of opened /dev/urandom files.

I looked at the code and I found that in class
org/apache/catalina/session/ManagerBase.java, the
/dev/urandom is opened but apparently never closed...
( any reason ? )

I made this patch and it fixed my problem, with no
colateral effected so far...

---
../jakarta-tomcat-5.0.27-src/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java
     2004-06-17 22:11:20.000000000 -0300
+++
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java
    2004-08-30 14:23:43.000000000 -0300
@@ -194,10 +194,12 @@
             try {
                 File f=new File( devRandomSource );
                 if( ! f.exists() ) return null;
-                randomIS= new DataInputStream( new
FileInputStream(f));
+                FileInputStream fin = new
FileInputStream(f);
+                randomIS= new DataInputStream(fin);
                 randomIS.readLong();
                 if( log.isDebugEnabled() )
                     log.debug( "Opening " +
devRandomSource );
+                fin.close();
                 return randomIS;
             } catch (IOException ex){
                 return null;
@@ -505,10 +507,12 @@
                     devRandomSource=s;
                     File f=new File( devRandomSource
);
                     if( ! f.exists() ) return;
-                    randomIS= new DataInputStream(
new FileInputStream(f));
+                    FileInputStream fin = new
FileInputStream(f);
+                    randomIS= new
DataInputStream(fin);
                     randomIS.readLong();
                     if( log.isDebugEnabled() )
                         log.debug( "Opening " +
devRandomSource );
+                   fin.close();
                 } catch( IOException ex ) {
                     randomIS=null;
                 }

Any comment ?
Thanks for the attention
Renato - Brazil.



		
_______________________________
Do you Yahoo!?
Win 1 of 4,000 free domain names from Yahoo! Enter now.
http://promotions.yahoo.com/goldrush

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org