Modify

Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#19638 closed defect (fixed)

ConcurrentModificationException in PluginListParser.addPluginInformation

Reported by: JanVanBekkum Owned by: team
Priority: normal Milestone: 20.08
Component: Core Version:
Keywords: template_report Cc:

Description

What steps will reproduce the problem?

  1. Start JOSM

What is the expected result?

Initial screen

What happens instead?

Crash

Please provide any additional information below. Attach a screenshot if possible.

URL:https://josm.openstreetmap.de/svn/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2020-07-30 12:44:04 +0200 (Thu, 30 Jul 2020)
Build-Date:2020-07-31 01:30:49
Revision:16812
Relative:URL: ^/trunk

Identification: JOSM/1.5 (16812 en_GB) Windows 10 64-Bit
OS Build number: Windows 10 Home 1909 (18363)
Memory Usage: 247 MB / 989 MB (162 MB allocated, but free)
Java version: 1.8.0_261-b12, Oracle Corporation, Java HotSpot(TM) Client VM
Look and Feel: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Screen: \Display0 3440x1440 (scaling 1.0x1.0), \Display1 1920x1080 (scaling 1.0x1.0)
Maximum Screen Size: 3440x1440
Best cursor sizes: 16x16 -> 32x32, 32x32 -> 32x32

Plugins:
+ BuildingGeneralization (23)
+ CustomizePublicTransportStop (35248)
+ DirectUpload (35499)
+ Mapillary
+ OpeningHoursEditor (35414)
+ apache-commons (35362)
+ apache-http (35092)
+ areaselector (359)
+ austriaaddresshelper (57)
+ buildings_tools (35500)
+ ejml (35313)
+ imagery_offset_db (35405)
+ jna (35092)
+ log4j (35092)
+ public_transport (35405)
+ tageditor (35258)
+ turnrestrictions (35515)
+ utilsplugin2 (35487)

Tagging presets:
+ D:\OneDrive\Open Streetmap\Campground Template.xml
+ https://josm.openstreetmap.de/josmfile?page=Presets/LaneAttributes&zip=1

Map paint styles:
+ https://josm.openstreetmap.de/josmfile?page=Styles/Lane_and_Road_Attributes&zip=1

Last errors/warnings:
- E: Error - <html>Plug-in Mapillary requires a plug-in which was not found. The missing plug-in is:<ul><li>javafx</li></ul></html>
- W: No plugin to download, operation canceled
- E: Handled by bug report queue: java.util.ConcurrentModificationException


=== REPORTED CRASH DATA ===
BugReportExceptionHandler#handleException:
No data collected.

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: AWT-EventQueue-0 (16) of main
java.util.ConcurrentModificationException
	at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
	at java.util.LinkedList$ListItr.next(Unknown Source)
	at org.openstreetmap.josm.plugins.PluginListParser.addPluginInformation(PluginListParser.java:97)
	at org.openstreetmap.josm.plugins.PluginListParser.parse(PluginListParser.java:78)
	at org.openstreetmap.josm.plugins.ReadRemotePluginInformationTask.parsePluginListDocument(ReadRemotePluginInformationTask.java:300)
	at org.openstreetmap.josm.plugins.ReadRemotePluginInformationTask.realRun(ReadRemotePluginInformationTask.java:337)
	at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:94)
	at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:142)
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

=== RUNNING THREADS ===
Thread: File Watcher (23) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.util.concurrent.LinkedBlockingDeque.takeFirst(Unknown Source)
java.util.concurrent.LinkedBlockingDeque.take(Unknown Source)
sun.nio.fs.AbstractWatchService.take(Unknown Source)
org.openstreetmap.josm.io.FileWatcher.processEvents(FileWatcher.java:120)
org.openstreetmap.josm.io.FileWatcher$$Lambda$175/30018916.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: main (1) of main
java.lang.Object.hashCode(Native Method)
java.util.WeakHashMap.hash(Unknown Source)
java.util.WeakHashMap.put(Unknown Source)
java.util.zip.ZipFile.getInputStream(Unknown Source)
java.util.jar.JarFile.getInputStream(Unknown Source)
sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
sun.misc.Resource.cachedInputStream(Unknown Source)
sun.misc.Resource.getByteBuffer(Unknown Source)
java.net.URLClassLoader.defineClass(Unknown Source)
java.net.URLClassLoader.access$100(Unknown Source)
java.net.URLClassLoader$1.run(Unknown Source)
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
org.openstreetmap.josm.plugins.PluginClassLoader.loadClass(PluginClassLoader.java:73)
java.lang.ClassLoader.loadClass(Unknown Source)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Unknown Source)
org.openstreetmap.josm.plugins.PluginInformation.loadClass(PluginInformation.java:384)
org.openstreetmap.josm.plugins.PluginHandler.loadPlugin(PluginHandler.java:801)
org.openstreetmap.josm.plugins.PluginHandler.loadPlugins(PluginHandler.java:890)
org.openstreetmap.josm.plugins.PluginHandler.loadLatePlugins(PluginHandler.java:933)
org.openstreetmap.josm.gui.MainApplication.loadLatePlugins(MainApplication.java:1146)
org.openstreetmap.josm.gui.MainApplication.mainJOSM(MainApplication.java:918)
org.openstreetmap.josm.gui.MainApplication$3.processArguments(MainApplication.java:276)
org.openstreetmap.josm.gui.MainApplication.main(MainApplication.java:713)

Thread: Timer-0 (48) of main
java.lang.Object.wait(Native Method)
java.util.TimerThread.mainLoop(Unknown Source)
java.util.TimerThread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-1 (34) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.ForkJoinPool.awaitWork(Unknown Source)
java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Java2D Disposer (10) of system
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
sun.java2d.Disposer.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: AWT-Windows (13) of system
sun.awt.windows.WToolkit.eventLoop(Native Method)
sun.awt.windows.WToolkit.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: Thread-5 (22) of main
sun.nio.fs.WindowsNativeDispatcher.GetQueuedCompletionStatus0(Native Method)
sun.nio.fs.WindowsNativeDispatcher.GetQueuedCompletionStatus(Unknown Source)
sun.nio.fs.WindowsWatchService$Poller.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: AWT-Shutdown (17) of system
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Unknown Source)
sun.awt.AWTAutoShutdown.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: JCS-ElementEventQueue-Thread-7 (43) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-4 (37) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.ForkJoinPool.awaitWork(Unknown Source)
java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Keep-Alive-Timer (21) of system
java.lang.Thread.sleep(Native Method)
sun.net.www.http.KeepAliveCache.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: main-worker-0 (45) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-3 (36) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.ForkJoinPool.awaitWork(Unknown Source)
java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Image Fetcher 0 (47) of main
java.lang.Object.wait(Native Method)
sun.awt.image.ImageFetcher.nextImage(Unknown Source)
sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
sun.awt.image.ImageFetcher.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-2 (35) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.ForkJoinPool.awaitWork(Unknown Source)
java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Reference Handler (2) of system
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Unknown Source)
java.lang.ref.Reference.tryHandlePending(Unknown Source)
java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

Thread: Signal Dispatcher (4) of system

Thread: Weak reference cleaner (24) of main
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
org.openstreetmap.josm.tools.ListenableWeakReference.clean(ListenableWeakReference.java:60)
org.openstreetmap.josm.tools.ListenableWeakReference$$Lambda$211/16476800.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: TimerQueue (18) of system
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
java.util.concurrent.DelayQueue.take(Unknown Source)
javax.swing.TimerQueue.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

Thread: AWT-EventQueue-0 (16) of main
Stacktrace see above.

Thread: ForkJoinPool.commonPool-worker-6 (38) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.ForkJoinPool.awaitWork(Unknown Source)
java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Finalizer (3) of system
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-7 (40) of main
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.ForkJoinPool.awaitWork(Unknown Source)
java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Attach Listener (5) of system

Attachments (2)

19638.minimal.patch (785 bytes ) - added by taylor.smock 5 years ago.
Minimal fix for concurrent modification exception (josm core)
19638.synchronized_collection.patch (10.1 KB ) - added by taylor.smock 5 years ago.
Make pluginList a synchronized collection

Download all attachments as: .zip

Change History (9)

comment:1 by skyper, 5 years ago

Component: CorePlugin mapillary
Owner: changed from team to taylor.smock
Version: tested

comment:2 by skyper, 5 years ago

Does manually installing the plugin "JavaFX" help?

comment:3 by taylor.smock, 5 years ago

#19194 (for installing virtual plugins if they are missing).

I'll see if I can figure out how this happens, since this is the actual crasher:

Thread: AWT-EventQueue-0 (16) of main
java.util.ConcurrentModificationException
        at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
        at java.util.LinkedList$ListItr.next(Unknown Source)
        at org.openstreetmap.josm.plugins.PluginListParser.addPluginInformation(PluginListParser.java:97)
        at org.openstreetmap.josm.plugins.PluginListParser.parse(PluginListParser.java:78)
        at org.openstreetmap.josm.plugins.ReadRemotePluginInformationTask.parsePluginListDocument(ReadRemotePluginInformationTask.java:300)
        at org.openstreetmap.josm.plugins.ReadRemotePluginInformationTask.realRun(ReadRemotePluginInformationTask.java:337)
        at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:94)
        at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:142)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

I don't think I'm making any modifications to the plugin list in the plugin.

Last edited 5 years ago by simon04 (previous) (diff)

by taylor.smock, 5 years ago

Attachment: 19638.minimal.patch added

Minimal fix for concurrent modification exception (josm core)

by taylor.smock, 5 years ago

Make pluginList a synchronized collection

in reply to:  1 comment:4 by taylor.smock, 5 years ago

Component: Plugin mapillaryCore
Owner: changed from taylor.smock to team

Replying to skyper:
I don't think this is a Mapillary specific problem. There are no references to pluginList in Mapillary source code. Or any other plugin.

comment:5 by simon04, 5 years ago

Summary: JOSM crashed upon startConcurrentModificationException in PluginListParser.addPluginInformation

comment:6 by simon04, 5 years ago

Resolution: fixed
Status: newclosed

In 16921/josm:

fix #19638 - PluginHandler: use CopyOnWriteArrayList for pluginList

comment:7 by simon04, 5 years ago

Milestone: 20.08

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.