
[ http://jira.qos.ch/browse/LBCLASSIC-51?page=com.atlassian.jira.plugin.system... ] Ralph Goers commented on LBCLASSIC-51: -------------------------------------- The code was modified several months ago so that StatusManager no longer exposes an Iterator. I'm not sure why this issue wasn't closed though.
Use of BasicStatusManager.iterator() without synchronization in ch.qos.logback.classic.jmx.Configurator -------------------------------------------------------------------------------------------------------
Key: LBCLASSIC-51 URL: http://jira.qos.ch/browse/LBCLASSIC-51 Project: logback-classic Issue Type: Bug Components: Other Affects Versions: unspecified Environment: Operating System: Windows Platform: PC Reporter: Joern Huxhorn Assignee: Ceki Gulcu
We sometimes receive strange exceptions in our webapp: [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: Exception in thread "Thread-6" java.lang.ArrayIndexOutOfBoundsException [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: at java.lang.System.arraycopy(Native Method) [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: at java.util.ArrayList.ensureCapacity(ArrayList.java:170) [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: at java.util.ArrayList.add(ArrayList.java:351) [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: at ch.qos.logback.core.BasicStatusManager.add(BasicStatusManager.java:38) [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: at ch.qos.logback.core.spi.ContextAwareBase.addStatus(ContextAwareBase.java:59) [21/Apr/2008:21:00:58] warning ( 1596): CORE3283: stderr: at ch.qos.logback.core.spi.ContextAwareBase.addInfo(ContextAwareBase.java:64) I just tried to analyze the problem and found out that ch.qos.logback.classic.jmx.Configurator is simply using the iterator of the status manager without synchronizing, as it's documented in BasicStatusManager. So instead of public List<String> getStatuses() { List<String> list = new ArrayList<String>(); Iterator<Status> it = context.getStatusManager().iterator(); while(it.hasNext()) { list.add(it.next().toString()); } return list; } it should probably be public List<String> getStatuses() { List<String> list = new ArrayList<String>(); StatusManager sm = context.getStatusManager(); Iterator<Status> it = sm.iterator(); synchronized(sm) { while(it.hasNext()) { list.add(it.next().toString()); } } return list; }
-- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira