Modify

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)

comment:1 by bastiK, 9 years ago

Cc: simon04 added

Simon, why did you change the ExecutorService to ForkJoinPool? As far as I understand it, fork/join only makes sense if you call fork() recursively at multiple levels. But in this case, it joins only once, right?

Quote from a blog article:

Fork/Join, introduced in Java 7, isn't intended to replace or compete with the existing concurrency utility classes; instead it updates and completes them. Fork/Join addresses the need for divide-and-conquer, or recursive task-processing in Java programs (see Resources).

I think if ExecutorService can do the job, it should be preferred.

in reply to:  1 ; comment:2 by simon04, 9 years ago

Replying to bastiK:

Simon, why did you change the ExecutorService to ForkJoinPool? As far as I understand it, fork/join only makes sense if you call fork() 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.

in reply to:  2 comment:3 by bastiK, 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 Don-vip, 9 years ago

Component: CoreCore mappaint
Summary: ConcurrentModificationExceptionConcurrentModificationException in StyleCache.equals

comment:5 by michael2402, 9 years ago

Isn't this the same as #12598? Then we can close this issue.

comment:6 by bastiK, 9 years ago

Resolution: duplicate
Status: newclosed

Closed as duplicate of #12598.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain team.
as The resolution will be set.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.