Modify

Opened 2 years ago

Closed 2 years ago

Last modified 2 years ago

#22522 closed defect (fixed)

RejectedExecutionException closing JOSM with open image viewer

Reported by: skyper Owned by: team
Priority: normal Milestone: 22.12
Component: Core image mapping Version: latest
Keywords: template_report Cc:

Description

What steps will reproduce the problem?

  1. Open some geoimages
  2. Open image view
  3. Quit JOSM

What is the expected result?

The program closes

What happens instead?

RejectedExecutionException

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

The geoimage layer is deleted but the program does not quit.

Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2022-11-22 14:37:25 +0100 (Tue, 22 Nov 2022)
Revision:18603
Build-Date:2022-11-23 02:30:57
URL:https://josm.openstreetmap.de/svn/trunk

Identification: JOSM/1.5 (18603 en) Linux Debian GNU/Linux 11 (bullseye)
Java version: 17.0.4+8-Debian-1deb11u1, Debian, OpenJDK 64-Bit Server VM
Look and Feel: javax.swing.plaf.metal.MetalLookAndFeel

Java package: openjdk-17-jre:amd64-17.0.4+8-1~deb11u1
libcommons-compress-java: libcommons-compress-java:all-1.20-1
libcommons-logging-java: libcommons-logging-java:all-1.2-2
fonts-noto: fonts-noto:all-20201225-1
VM arguments: [-Djosm.home=<josm.pref>/]

Last errors/warnings:
- 00115.514 E: Handled by bug report queue: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@5b2f49a9[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@5c2d75cb[Wrapped task = org.openstreetmap.josm.gui.layer.geoimage.ImageDisplay$LoadImageRunnable@78c8a42d]] rejected from org.openstreetmap.josm.gui.progress.swing.ProgressMonitorExecutor@68def8b7[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 5]



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

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: AWT-EventQueue-0 (21) of main
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@5b2f49a9[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@5c2d75cb[Wrapped task = org.openstreetmap.josm.gui.layer.geoimage.ImageDisplay$LoadImageRunnable@78c8a42d]] rejected from org.openstreetmap.josm.gui.progress.swing.ProgressMonitorExecutor@68def8b7[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 5]
	at java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2065)
	at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:833)
	at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1365)
	at org.openstreetmap.josm.gui.progress.swing.ProgressMonitorExecutor.execute(ProgressMonitorExecutor.java:41)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageDisplay.setImage(ImageDisplay.java:638)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateButtonsNonNullEntry(ImageViewerDialog.java:779)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:720)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:730)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:683)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.layerRemoving(ImageViewerDialog.java:910)
	at org.openstreetmap.josm.gui.layer.LayerManager.fireLayerRemoving(LayerManager.java:476)
	at org.openstreetmap.josm.gui.layer.LayerManager.realRemoveSingleLayer(LayerManager.java:278)
	at org.openstreetmap.josm.gui.layer.MainLayerManager.realRemoveSingleLayer(MainLayerManager.java:330)
	at org.openstreetmap.josm.gui.layer.LayerManager.realRemoveLayer(LayerManager.java:266)
	at org.openstreetmap.josm.gui.layer.LayerManager.lambda$removeLayer$1(LayerManager.java:248)
	at org.openstreetmap.josm.gui.util.GuiHelper.runInEDTAndWaitWithException(GuiHelper.java:247)
	at org.openstreetmap.josm.gui.layer.LayerManager.removeLayer(LayerManager.java:248)
	at org.openstreetmap.josm.gui.layer.LayerManager.realResetState(LayerManager.java:515)
	at org.openstreetmap.josm.gui.layer.MainLayerManager.realResetState(MainLayerManager.java:516)
	at org.openstreetmap.josm.gui.util.GuiHelper.runInEDTAndWaitWithException(GuiHelper.java:247)
	at org.openstreetmap.josm.gui.layer.LayerManager.resetState(LayerManager.java:506)
	at org.openstreetmap.josm.gui.MainTermination.run(MainTermination.java:43)
	at org.openstreetmap.josm.spi.lifecycle.Lifecycle.exitJosm(Lifecycle.java:121)
	at org.openstreetmap.josm.gui.MainApplication.exitJosm(MainApplication.java:522)
	at org.openstreetmap.josm.gui.MainFrame$ExitWindowAdapter.windowClosing(MainFrame.java:199)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.Window.processWindowEvent(Window.java:2085)
	at java.desktop/javax.swing.JFrame.processWindowEvent(JFrame.java:298)
	at java.desktop/java.awt.Window.processEvent(Window.java:2044)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Attachments (0)

Change History (5)

comment:1 by taylor.smock, 2 years ago

I noticed this last week, and I was trying to figure out the best way to fix it.

The simplest "fix" would be something like this:

  • src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
    a b  
    635635     */
    636636    public Future<?> setImage(IImageEntry<?> entry) {
    637637        LoadImageRunnable runnable = setImage0(entry);
    638         return runnable != null ? MainApplication.worker.submit(runnable) : null;
     638        return runnable != null && !MainApplication.worker.isShutdown() ? MainApplication.worker.submit(runnable) : null;
    639639    }
    640640
    641641    protected LoadImageRunnable setImage0(IImageEntry<?> entry) {

I might commit that just to get the 22.11 release out the door, but I think there might be a better place for it.

comment:2 by taylor.smock, 2 years ago

Resolution: fixed
Status: newclosed

In 18605/josm:

See #21605, fix #22522: RejectedExecutionException closing JOSM with open image viewer

This is caused by layer cleanup, which attempts to set the image to null.
This fails since the MainApplication.worker is shutdown.

Additionally, the layer cleanup code was not sending the removed layer to the
image viewer, so it was not always properly cleaning up a layer.

comment:3 by skyper, 2 years ago

Ticket #22538 has been marked as a duplicate of this ticket.

comment:4 by skyper, 2 years ago

Ticket #22537 has been marked as a duplicate of this ticket.

comment:5 by Klumbumbus, 2 years ago

Milestone: 22.12

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.