DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG· RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=41838>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND· INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41838 Summary: HashMap infinite loop Product: Slide Version: 2.1 Platform: Other OS/Version: other Status: NEW Severity: normal Priority: P2 Component: Transaction Manager AssignedTo: slide-dev@jakarta.apache.org ReportedBy: [EMAIL PROTECTED] When many concurrent threads try to connect to slide using the same user account, an infinite loop may occur in HashMap.put or HashMap.transfer methods. Stack trace of some threads inside JConsole : Name: http-8095-Processor36 State: RUNNABLE Total blocked: 142 Total waited: 14 Stack trace: java.util.HashMap.put(HashMap.java:385) org.apache.slide.store.ExtendedStore.end(ExtendedStore.java:1029) org.apache.slide.transaction.SlideTransaction.delistResource(SlideTransaction.java:377) org.apache.slide.store.AbstractStore.delist(AbstractStore.java:1574) org.apache.slide.store.AbstractStore.delist(AbstractStore.java:1559) org.apache.slide.store.ExtendedStore.retrieveObject(ExtendedStore.java:581) org.apache.slide.structure.StructureImpl.retrieve(StructureImpl.java:178) org.apache.slide.structure.StructureImpl.retrieve(StructureImpl.java:160) org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:387) org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:155) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) Name: http-8095-Processor46 State: RUNNABLE Total blocked: 44 Total waited: 12 Stack trace: java.util.HashMap.transfer(HashMap.java:476) java.util.HashMap.resize(HashMap.java:455) java.util.HashMap.addEntry(HashMap.java:745) java.util.HashMap.put(HashMap.java:395) org.apache.slide.store.ExtendedStore.end(ExtendedStore.java:1029) The ExtendedStore.java, line 1029 : suspendedLocks.put(txId, locks.get()); Many threads use the same ExtendedStore instance, so the same suspendedLocks instance. suspendedLocks is not a synchronized Map. The following link http://blogs.opensymphony.com/plightbo/2005/07/hashmapget_can_cause_an_infini.html explains clearly the behaviour of "non synchronized Map updated by concurrent threads". The patch is : private Map suspendedLocks = Collections.synchronizedMap(new HashMap()); -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]