https://issues.apache.org/bugzilla/show_bug.cgi?id=48790
Summary: Race condition in org.apache.catalina.session.ManagerBase:maxActive Product: Tomcat 6 Version: 6.0.18 Platform: All OS/Version: All Status: NEW Severity: major Priority: P2 Component: Catalina AssignedTo: dev@tomcat.apache.org ReportedBy: qiyao...@gmail.com We are running tomcat 6.0.18 with a race detector (http://www.alphaworks.ibm.com/tech/msdk), and find one race condition in class org.apache.catalina.session.ManagerBase field maxActive. Data Race 1 : org.apache.catalina.session.ManagerBase : maxActive Thread "http-8080-3" : Tid 34 : WRITE Lock Set : [ ] [org.apache.catalina.session.ManagerBase : add(Lorg/apache/catalina/Session;)V : : 741] [org.apache.catalina.session.StandardSession : setId(Ljava/lang/String;)V : : 368] [org.apache.catalina.session.ManagerBase : createSession(Ljava/lang/String;)Lorg/apache/catalina/Session; : : 827] [org.apache.catalina.session.StandardManager : createSession(Ljava/lang/String;)Lorg/apache/catalina/Session; : : 291] [org.apache.catalina.connector.Request : doGetSession(Z)Lorg/apache/catalina/Session; : : 2324] [org.apache.catalina.connector.Request : getSession(Z)Ljavax/servlet/http/HttpSession; : : 2074] [org.apache.catalina.connector.RequestFacade : getSession(Z)Ljavax/servlet/http/HttpSession; : : 833] [org.apache.catalina.connector.RequestFacade : getSession()Ljavax/servlet/http/HttpSession; : : 844] [com.ecyrd.jspwiki.auth.AuthenticationManager : login(Ljavax/servlet/http/HttpServletRequest;)Z : : 270] ........ Thread "http-8080-1" : Tid 32 : READ Lock Set : [ ] [org.apache.catalina.session.ManagerBase : add(Lorg/apache/catalina/Session;)V : : 740] [org.apache.catalina.session.StandardSession : setId(Ljava/lang/String;)V : : 368] [org.apache.catalina.session.ManagerBase : createSession(Ljava/lang/String;)Lorg/apache/catalina/Session; : : 827] [org.apache.catalina.session.StandardManager : createSession(Ljava/lang/String;)Lorg/apache/catalina/Session; : : 291] ........ Here is the code snip of ManagerBase.java public void add(Session session) { sessions.put(session.getIdInternal(), session); int size = sessions.size(); 1-> if( size > maxActive ) { 2-> maxActive = size; } } Statement 1 and statement 2 should executed in an atomic manner. One fix to this problem is to move statement 1 and statement 2 into a synchronized block. -- 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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org