tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 47718] New: ManagerBase leaks fd to /dev/urandom when context stopped
Date Thu, 20 Aug 2009 21:48:27 GMT
https://issues.apache.org/bugzilla/show_bug.cgi?id=47718

           Summary: ManagerBase leaks fd to /dev/urandom when context
                    stopped
           Product: Tomcat 5
           Version: 5.5.27
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: gsexton@mhsoftware.com


--- Comment #0 from George Sexton <gsexton@mhsoftware.com> 2009-08-20 14:48:26 PDT ---
On operating systems where /dev/urandom exists,
org.apache.catalina.session.ManagerBase will use it as a source of data for
getRandomBytes().

If you stop a context or undeploy a host, the number of file descriptors that
have /dev/urandom open tomcat remains constant.

For example, if you use the manager application to stop or undeploy a context,
the number of file descriptors to /dev/urandom is the same as before the stop.

File descriptor use is determined by using lsof or examining the /proc/<pid>/fd
directory on Linux.

The same issue is seen if you undeploy a virtual host.

If you undeploy/deploy a context, or remove/add a virtual host, the # of file
descriptors to /dev/urandom will increase each time.

This is because ManagerBase does not close the DataInputStream it holds to
/dev/urandom.

The patch shown below resolves this issue. Stopping a context, or undeploying a
virtual host will close the session manager's reference to /dev/urandom.

---
apache-tomcat-5.5.28-src/container/catalina/src/share/org/apache/catalina/session/ManagerBase.java
   2009-07-24 13:35:00.000000000 -0600
+++
apache-tomcat-5.5.28-gls/container/catalina/src/share/org/apache/catalina/session/ManagerBase.java
   2009-08-20 13:38:03.000000000 -0600
@@ -688,10 +688,17 @@
     }

    public void destroy() {
         if( oname != null )
             Registry.getRegistry(null, null).unregisterComponent(oname);
+        if (randomIS!=null) {
+            try {
+                randomIS.close();
+            } catch (IOException ioe) {
+            }
+            randomIS=null;
+        }
         initialized=false;
         oname = null;
         // Don't clear log since it is required in case attributes are changed
         // (eg via JMX) whilst the manager is stopped.
     }

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

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


Mime
View raw message