Opened 9 years ago
Closed 9 years ago
#12491 closed defect (duplicate)
ConcurrentModificationException in StyleCache.equals
Reported by: | naoliv | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Core mappaint | Version: | |
Keywords: | Cc: | simon04 |
Description
I was editing some data, clicked the right mouse button to scroll the image layer and got this:
ERRO: java.util.ConcurrentModificationException: java.util.ConcurrentModificationException: java.util.ConcurrentModificationException. Causa: java.util.ConcurrentModificationException: java.util.ConcurrentModificationException. Causa: java.util.ConcurrentModificationException java.util.ConcurrentModificationException: java.util.ConcurrentModificationException: java.util.ConcurrentModificationException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593) at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677) at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720) at java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2616) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.render(StyledMapRenderer.java:1895) at org.openstreetmap.josm.gui.layer.OsmDataLayer.paint(OsmDataLayer.java:401) at org.openstreetmap.josm.gui.MapView.paintLayer(MapView.java:638) at org.openstreetmap.josm.gui.MapView.paint(MapView.java:722) at javax.swing.JComponent.paintChildren(JComponent.java:889) at javax.swing.JComponent.paint(JComponent.java:1065) at javax.swing.JComponent.paintChildren(JComponent.java:889) at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1047) at javax.swing.JComponent.paint(JComponent.java:1065) at javax.swing.JComponent.paintChildren(JComponent.java:889) at javax.swing.JComponent.paint(JComponent.java:1065) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.util.ConcurrentModificationException: java.util.ConcurrentModificationException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593) at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677) at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$ComputeStyleListWorker.compute(StyledMapRenderer.java:1797) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$ComputeStyleListWorker.compute(StyledMapRenderer.java:1761) at java.util.concurrent.RecursiveTask.exec(RecursiveTask.java:94) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) Caused by: java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at java.util.AbstractList.equals(AbstractList.java:522) at java.util.Objects.equals(Objects.java:59) at org.openstreetmap.josm.gui.mappaint.DividedScale.equals(DividedScale.java:182) at java.util.Arrays.deepEquals0(Arrays.java:4299) at java.util.Arrays.deepEquals(Arrays.java:4269) at org.openstreetmap.josm.gui.mappaint.StyleCache.equals(StyleCache.java:73) at org.openstreetmap.josm.data.osm.Storage$1.equals(Storage.java:365) at org.openstreetmap.josm.data.osm.Storage.getBucket(Storage.java:291) at org.openstreetmap.josm.data.osm.Storage.putUnique(Storage.java:244) at org.openstreetmap.josm.gui.mappaint.StyleCache.intern(StyleCache.java:82) at org.openstreetmap.josm.gui.mappaint.StyleCache.put(StyleCache.java:43) at org.openstreetmap.josm.gui.mappaint.ElemStyles.getStyleCacheWithRange(ElemStyles.java:149) at org.openstreetmap.josm.gui.mappaint.ElemStyles.get(ElemStyles.java:83) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$ComputeStyleListWorker.add(StyledMapRenderer.java:1838) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$ComputeStyleListWorker.visit(StyledMapRenderer.java:1819) at org.openstreetmap.josm.data.osm.Node.accept(Node.java:214) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$ComputeStyleListWorker.computeDirectly(StyledMapRenderer.java:1808) at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$ComputeStyleListWorker.compute(StyledMapRenderer.java:1788) ... 6 more
I don't know exactly why this happened, nor if indeed it's related with the right button click nor I don't know how to reproduce this, sorry.
JOSM:
URL:http://josm.openstreetmap.de/svn/trunk Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b Last:Changed Date: 2016-02-04 01:17:15 +0100 (Thu, 04 Feb 2016) Build-Date:2016-02-04 02:33:04 Revision:9733 Relative:URL: ^/trunk Identification: JOSM/1.5 (9733 pt_BR) Linux Debian GNU/Linux testing (stretch) Memory Usage: 1634 MB / 9102 MB (787 MB allocated, but free) Java version: 1.8.0_72-internal-b05, Oracle Corporation, OpenJDK 64-Bit Server VM VM arguments: [-Dawt.useSystemAAFontSettings=on] Dataset consistency test: No problems found Plugins: - Create_grid_of_ways (31772) - OpeningHoursEditor (31772) - PicLayer (31895) - RoadSigns (31895) - SimplifyArea (31895) - apache-commons (31895) - buildings_tools (31895) - conflation (0.1.9) - contourmerge (1014) - download_along (31772) - editgpx (31772) - ejml (31895) - geotools (31895) - imagery_offset_db (32046) - importvec (31772) - jts (31772) - log4j (31895) - measurement (31895) - merge-overlap (31967) - opendata (31937) - pbf (31772) - pdfimport (32019) - poly (31772) - reverter (32005) - scripting (30722) - todo (29154) - turnrestrictions (31895) - undelete (31895) - utilsplugin2 (32018)
Attachments (0)
Change History (6)
follow-up: 2 comment:1 by , 9 years ago
Cc: | added |
---|
follow-up: 3 comment:2 by , 9 years ago
Replying to bastiK:
Simon, why did you change the
ExecutorService
toForkJoinPool
? As far as I understand it, fork/join only makes sense if you callfork()
recursively at multiple levels. But in this case, it joins only once, right?
I tried to simplify the code, but I agree that this is not the use-case ForkJoinPool
has been designed for. I'm no longer convinced whether r9351 was a good idea.
Do you think this bug is related to the ForkJoinPool
usage? In r9341, org.openstreetmap.josm.gui.mappaint.StyleCache#equals
has been implemented which shows up in the stacktrace.
comment:3 by , 9 years ago
Replying to simon04:
Do you think this bug is related to the
ForkJoinPool
usage? In r9341,org.openstreetmap.josm.gui.mappaint.StyleCache#equals
has been implemented which shows up in the stacktrace.
You are right, there is no indication that it is related to ForkJoinPool
usage. But I don't think it is related to r9341 either - nothing fundamental changed in the structure and the ArrayList
that causes the exception existed before.
I would expect such an exception if ElemStyles.getStyleCacheWithRange
is executed for the same primitive in different threads at the same time. NavigatableComponent.isSelectablePredicate
looks like a possible culprit, but it always runs in EDT, so I have no idea at the moment.
comment:4 by , 9 years ago
Component: | Core → Core mappaint |
---|---|
Summary: | ConcurrentModificationException → ConcurrentModificationException in StyleCache.equals |
comment:6 by , 9 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
Closed as duplicate of #12598.
Simon, why did you change the
ExecutorService
toForkJoinPool
? As far as I understand it, fork/join only makes sense if you callfork()
recursively at multiple levels. But in this case, it joins only once, right?Quote from a blog article:
I think if
ExecutorService
can do the job, it should be preferred.