[
http://jira.qos.ch/browse/LBCLASSIC-51?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=10622#action_10622
]
Joern Huxhorn commented on LBCLASSIC-51:
----------------------------------------
Please consider fixing this problem before releasing the next logback version.
We had to remove the jmx configurator from our app and would really like to use
it in production.
Thanks, Joern.
> 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: Logback dev list
>
> 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
_______________________________________________
logback-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-dev