AbstractMarkupParameters.toString() is not thread-safe

Issue #1160 resolved
Chase Tingley created an issue

We’ve got a piece of code that shares static Parameters instances between different threads (each with their own IFilter instance). As part of this code, there’s a step where we serialize the parameters object via toString(). I’ve hit at least 3 separate exceptions in AbstractMarkupParameters.toString(), all within Yaml.dump() in the snakeyaml library.

Here’s one of them:

! java.util.ConcurrentModificationException: null
! at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1043)
! at java.base/java.util.ArrayList$Itr.next(ArrayList.java:997)
! at org.yaml.snakeyaml.serializer.Serializer.anchorNode(Serializer.java:144)
! at org.yaml.snakeyaml.serializer.Serializer.anchorNode(Serializer.java:148)
! at org.yaml.snakeyaml.serializer.Serializer.serialize(Serializer.java:111)
! at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:276)
! at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:243)
! at org.yaml.snakeyaml.Yaml.dump(Yaml.java:220)
! at net.sf.okapi.filters.abstractmarkup.config.YamlConfigurationReader.toString(YamlConfigurationReader.java:121)
! at net.sf.okapi.filters.abstractmarkup.config.TaggedFilterConfiguration.toString(TaggedFilterConfiguration.java:285)
! at net.sf.okapi.filters.abstractmarkup.AbstractMarkupParameters.toString(AbstractMarkupParameters.java:46)

We’ve run into problems with SnakeYaml before – see for example https://bitbucket.org/okapiframework/okapi/pull-requests/429.

Comments (2)

  1. Log in to comment