Modify

Opened 3 months ago

Closed 3 months ago

#23447 closed defect (fixed)

Fatal "crash" attempting to delete all "Outer" members & then multipolygon

Reported by: anonymous Owned by: team
Priority: normal Milestone: 24.01
Component: Core Version:
Keywords: template_report Cc:

Description

What steps will reproduce the problem?

  1. Double clicking on ALL "Outer" members of multipolygon and then doing Edit "Delete"
  2. Attempting to "Delete" multipolygon results in "error condition"

What is the expected result? I just want to delete all of the "Outer" members & multipolygon

What happens instead? This error message reporting "fatal crash"

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

Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2023-08-29 13:38:40 +0200 (Tue, 29 Aug 2023)
Revision:18822
Build-Date:2023-08-30 01:30:57
URL:https://josm.openstreetmap.de/svn/trunk

Identification: JOSM/1.5 (18822 en) Linux Debian GNU/Linux 12 (bookworm)
Memory Usage: 460 MB / 3926 MB (91 MB allocated, but free)
Java version: 17.0.9+9-Debian-1deb12u1, Debian, OpenJDK 64-Bit Server VM
Look and Feel: javax.swing.plaf.metal.MetalLookAndFeel
Screen: :0.0 1920×1080 (scaling 1.00×1.00)
Maximum Screen Size: 1920×1080
Best cursor sizes: 16×16→16×16, 32×32→32×32
Environment variable LANG: en_US.UTF-8
System property file.encoding: UTF-8
System property sun.jnu.encoding: UTF-8
Locale info: en_US
Numbers with default locale: 1234567890 -> 1234567890
Desktop environment: GNOME
Java package: openjdk-17-jre:amd64-17.0.9+9-1~deb12u1
Java ATK Wrapper package: libatk-wrapper-java:all-0.40.0-3
fonts-noto: fonts-noto:-
Dataset consistency test: No problems found

Plugins:
+ apache-commons (36176)
+ ejml (36176)
+ geotools (36176)
+ jackson (36176)
+ jaxb (36118)
+ jts (36004)
+ opendata (36186)
+ reverter (36126)
+ rex (53)
+ tageditor (36126)
+ turnlanes-tagging (0.0.5)
+ utilsplugin2 (36178)

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

Last errors/warnings:
- 00000.928 W: Update plugins - Last plugin update more than 39 days ago.
- 00193.885 E: org.openstreetmap.josm.io.OsmApiException: ResponseCode=400, Error Header=<You requested too many nodes (limit is 50000). Either request a smaller area, or use planet.osm>
- 00193.890 E: Bad Request - <html>The OSM server 'api.openstreetmap.org' reported a bad request.<br><br>The area you tried to download is too big or your request was too large.<br>Either request a smaller area or use an export file provided by the OSM community.</html>
- 00275.033 W: java.net.SocketTimeoutException: Read timed out. Cause: java.net.SocketTimeoutException: Read timed out
- 00275.134 E: Failed to locate image 'https://www.fs.usda.gov/sites/all/themes/fs_hq/images/usfslogo.png'
- 00686.547 E: Handled by bug report queue: java.lang.IllegalArgumentException: {Relation id=10719153 version=2 MVDT]} is already deleted



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

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: AWT-EventQueue-0 (22) of main
java.lang.IllegalArgumentException: {Relation id=10719153 version=2 MVDT]} is already deleted
	at org.openstreetmap.josm.command.DeleteCommand.lambda$executeCommand$0(DeleteCommand.java:211)
	at org.openstreetmap.josm.data.osm.DataSet.update(DataSet.java:1063)
	at org.openstreetmap.josm.command.DeleteCommand.executeCommand(DeleteCommand.java:207)
	at org.openstreetmap.josm.data.UndoRedoHandler.addNoRedraw(UndoRedoHandler.java:300)
	at org.openstreetmap.josm.data.UndoRedoHandler.add(UndoRedoHandler.java:354)
	at org.openstreetmap.josm.actions.mapmode.DeleteAction.deleteRelations(DeleteAction.java:367)
	at org.openstreetmap.josm.actions.mapmode.DeleteAction.deleteRelation(DeleteAction.java:348)
	at org.openstreetmap.josm.gui.dialogs.relation.actions.DeleteCurrentRelationAction.actionPerformed(DeleteCurrentRelationAction.java:38)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6626)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3389)
	at java.desktop/java.awt.Component.processEvent(Component.java:6391)
	at java.desktop/java.awt.Container.processEvent(Container.java:2266)
	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.Component.dispatchEvent(Component.java:4833)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
	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:775)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
	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:747)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	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:744)
	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 (1)

23447.patch (2.5 KB ) - added by GerdP 3 months ago.
possible fix, please review

Download all attachments as: .zip

Change History (21)

comment:1 by GerdP, 3 months ago

Can you reproduce this with current tested version r18940? If yes, please try to describe more precisly how to reproduce.

comment:2 by GerdP, 3 months ago

I can reproduce with r18940 like this:
1) Draw closed way
2) create multipolygon from that way
3) open relation editor for new multipolygon
4) select the only member by clicking on the outline so that it appears in selection window
5) press DEL, confirm to delete the members and the relation
6) click on the trashcan icon in the relation editor

Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2024-01-16 08:06:33 +0100 (Tue, 16 Jan 2024)
Revision:18940
Build-Date:2024-01-17 02:31:01
URL:https://josm.openstreetmap.de/svn/trunk

Identification: JOSM/1.5 (18940 en) Windows 10 64-Bit
OS Build number: Windows 10 Pro 2009 (19045)
Memory Usage: 318 MB / 1888 MB (181 MB allocated, but free)
Java version: 17.0.8+7-LTS, Azul Systems, Inc., OpenJDK 64-Bit Server VM
Look and Feel: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Screen: \Display0 1920×1080 (scaling 1.00×1.00)
Maximum Screen Size: 1920×1080
Best cursor sizes: 16×16→32×32, 32×32→32×32
System property file.encoding: Cp1252
System property sun.jnu.encoding: Cp1252
Locale info: en_DE
Numbers with default locale: 1234567890 -> 1234567890
VM arguments: [-Djpackage.app-version=1.5.18789, --add-modules=java.scripting,java.sql,javafx.controls,javafx.media,javafx.swing,javafx.web, --add-exports=java.base/sun.security.action=ALL-UNNAMED, --add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED, --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED, --add-opens=java.base/java.lang=ALL-UNNAMED, --add-opens=java.base/java.nio=ALL-UNNAMED, --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED, --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED, --add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED, --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED, --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED, -Djpackage.app-path=%UserProfile%\AppData\Local\JOSM\HWConsole.exe]
Dataset consistency test: No problems found

Plugins:
+ EasyPresets (1623509627)
+ OpeningHoursEditor (36196)
+ RoadSigns (36196)
+ apache-commons (36176)
+ buildings_tools (36200)
+ comfort0 (36200)
+ o5m (36126)
+ pbf (36176)
+ poly (36126)
+ reltoolbox (36200)
+ reverter (36196)
+ undelete (36126)
+ utilsplugin2 (36200)

Tagging presets:
+ <josm.pref>/EasyPresets.xml

Validator rules:
+ d:\java_tools\JOSM\mygeometry.mapcss
+ https://josm.openstreetmap.de/josmfile?page=Rules/GermanySpecific&zip=1
+ c:\josm\core\resources\data\validator\geometry.mapcss

Last errors/warnings:
- 00000.477 W: extended font config - overriding 'filename.Myanmar_Text=mmrtext.ttf' with 'MMRTEXT.TTF'
- 00000.479 W: extended font config - overriding 'filename.Mongolian_Baiti=monbaiti.ttf' with 'MONBAITI.TTF'
- 00000.799 E: java.security.KeyStoreException: Windows-ROOT not found. Cause: java.security.NoSuchAlgorithmException: Windows-ROOT KeyStore not available
- 00007.084 E: java.nio.file.NoSuchFileException: <josm.pref>\EasyPresets.xml
- 00007.085 E: <josm.pref>/EasyPresets.xml
- 00352.617 E: Handled by bug report queue: java.lang.IllegalArgumentException: {Relation id=10719153 version=3 DT]} is already deleted
- 00464.563 E: Handled by bug report queue: java.lang.IllegalArgumentException: {Relation id=-79 version=0 MVDT]} is already deleted
- 00665.784 E: Handled by bug report queue: java.lang.IllegalArgumentException: {Relation id=-82 version=0 MVDT]} is already deleted



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

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: AWT-EventQueue-0 (23) of main
java.lang.IllegalArgumentException: {Relation id=-82 version=0 MVDT]} is already deleted
	at org.openstreetmap.josm.command.DeleteCommand.lambda$executeCommand$0(DeleteCommand.java:211)
	at org.openstreetmap.josm.data.osm.DataSet.update(DataSet.java:1065)
	at org.openstreetmap.josm.command.DeleteCommand.executeCommand(DeleteCommand.java:207)
	at org.openstreetmap.josm.data.UndoRedoHandler.addNoRedraw(UndoRedoHandler.java:300)
	at org.openstreetmap.josm.data.UndoRedoHandler.add(UndoRedoHandler.java:354)
	at org.openstreetmap.josm.actions.mapmode.DeleteAction.deleteRelations(DeleteAction.java:367)
	at org.openstreetmap.josm.actions.mapmode.DeleteAction.deleteRelation(DeleteAction.java:348)
	at org.openstreetmap.josm.gui.dialogs.relation.actions.DeleteCurrentRelationAction.actionPerformed(DeleteCurrentRelationAction.java:38)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

by GerdP, 3 months ago

Attachment: 23447.patch added

possible fix, please review

comment:3 by GerdP, 3 months ago

The patch disables the delete action in the relation editor if the relation has the status deleted. Not sure if this is the best approach to handle this?

comment:4 by taylor.smock, 3 months ago

Maybe we should just close the relation editor if it has been deleted.

comment:5 by GerdP, 3 months ago

I don't think so. The relation editor may contain a different version of the relation, e.g. user may select different members and then decide to delete the original members without being aware that the original relation is deleted as well when confirming this.

comment:6 by taylor.smock, 3 months ago

OK. At that point, I think we should listen for deletion events and ask the user what they want to do. Maybe via a conflict dialog.

comment:7 by GerdP, 3 months ago

I just tried what happens if the user tries to save the relation that was deleted before. This is handled with a conflict dialog. So, only the delete action seems to be problematic.

comment:8 by skyper, 3 months ago

You can still undelete the relation, e.g. using undo, or duplicate it. But at this stage, open relation editor with the relation deleted in the data layer, all actions in the relation editor which change the relation in the data layer could cause problems. It is nice that the save action leads to a conflict dialog. The delete action actually should just be silenced as there is no problem.

comment:9 by GerdP, 3 months ago

OK to commit this for milestone 24.01?

comment:10 by taylor.smock, 3 months ago

Go for it. I'll be doing the i18n update tomorrow morning and the actual release Monday.

comment:11 by GerdP, 3 months ago

Resolution: fixed
Status: newclosed

In 18967/josm:

fix #23447: Fatal "crash" attempting to delete all "Outer" members & then multipolygon

  • disable the delete action in the relation editor if the relation has the status deleted
  • in DeleteCurrentRelationAction updateEnabledState() now uses getRelaion() instead of getRelationSnapshot(), similar to the actionPerformed() method

comment:12 by GerdP, 3 months ago

Milestone: 24.01

comment:13 by skyper, 3 months ago

I am not happy with the disabled delete button as it is not obvious why. I'd rather would prefer a similar solution than the save button leading to a conflict which in this case of both status "deleted" would result in no conflict at all.

comment:14 by GerdP, 3 months ago

I'm confused. You wrote

The delete action actually should just be silenced as there is no problem.

I understood that as "just disable the delete action when it cannot delete something"

comment:15 by skyper, 3 months ago

Sorry, my bad. I meant that the exception should just be caught. The relation is deleted in the data layer so deleting it in the relation editor just syncs the states which should be no problem.

comment:16 by GerdP, 3 months ago

So simply close the dialog instead of disabling the delete button? No matter what changes were made in the editor?

comment:17 by skyper, 3 months ago

Yes, that is what I would expect.

comment:18 by GerdP, 3 months ago

Resolution: fixed
Status: closedreopened

OK, I'll have a look at this.

comment:19 by skyper, 3 months ago

Thanks

comment:20 by GerdP, 3 months ago

Resolution: fixed
Status: reopenedclosed

In 18968/josm:

fix #23447:Fatal "crash" attempting to delete all "Outer" members & then multipolygon

  • revert changes from r18967
  • simply close relation editor dialog for the already deleted relation instead of generating an additional delete command

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.