Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changing Embedded Display Macros Crashes the Screen #3203

Open
UrbanBobek opened this issue Dec 2, 2024 · 2 comments
Open

Changing Embedded Display Macros Crashes the Screen #3203

UrbanBobek opened this issue Dec 2, 2024 · 2 comments

Comments

@UrbanBobek
Copy link

Hi all,

In our screens we use a script to change macro values of an embedded display to select between device instances. When we change the file or macros property of embedded display, the screen often crashes.

This happens most often with many levels of embedding and when changing the property quickly from one value to another. I've tried reproducing this behavior with a minimal example display where a script changes the macros property of an embedded display repeatedly. Pressing the button several times makes the screen crash consistently.
macro_update_bug.zip

The error log output when the attached script crashes the screen:

2024-12-02 09:49:59 SEVERE [org.csstudio.display.builder.model] Unknown listener org.csstudio.display.builder.representation.ToolkitRepresentation$$Lambda$812/0x00007f3be0487560@4006f5df
java.lang.Exception: Unknown listener
	at org.csstudio.display.builder.model.properties.PropertyChangeHandler.removePropertyListener(PropertyChangeHandler.java:119)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:398)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.dispose(EmbeddedDisplayRepresentation.java:491)
	at org.csstudio.display.builder.representation.WidgetRepresentation.destroy(WidgetRepresentation.java:88)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeWidget(ToolkitRepresentation.java:435)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeChildren(ToolkitRepresentation.java:410)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:394)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.runtime.ActionUtil.handleClose(ActionUtil.java:205)
	at org.csstudio.display.builder.runtime.app.DisplayRuntimeInstance.disposeModel(DisplayRuntimeInstance.java:457)
	at org.csstudio.display.builder.runtime.app.DisplayRuntimeInstance.onClosed(DisplayRuntimeInstance.java:495)
	at org.phoebus.ui.docking.DockItem.handleClosed(DockItem.java:714)
	at org.phoebus.ui.docking.DockItemWithInput.handleClosed(DockItemWithInput.java:487)
	at org.phoebus.ui.docking.DockItem.close(DockItem.java:757)
	at org.phoebus.ui.docking.DockItem.lambda$handleCloseRequest$4(DockItem.java:209)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:316)
	at java.base/java.lang.Thread.run(Thread.java:840)

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:209)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:400)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.dispose(EmbeddedDisplayRepresentation.java:491)
	at org.csstudio.display.builder.representation.WidgetRepresentation.destroy(WidgetRepresentation.java:88)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeWidget(ToolkitRepresentation.java:435)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeChildren(ToolkitRepresentation.java:410)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:394)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.runtime.ActionUtil.handleClose(ActionUtil.java:205)
	at org.csstudio.display.builder.runtime.app.DisplayRuntimeInstance.disposeModel(DisplayRuntimeInstance.java:457)
	at org.csstudio.display.builder.runtime.app.DisplayRuntimeInstance.onClosed(DisplayRuntimeInstance.java:495)
	at org.phoebus.ui.docking.DockItem.handleClosed(DockItem.java:714)
	at org.phoebus.ui.docking.DockItemWithInput.handleClosed(DockItemWithInput.java:487)
	at org.phoebus.ui.docking.DockItem.close(DockItem.java:757)
	at org.phoebus.ui.docking.DockItem.lambda$handleCloseRequest$4(DockItem.java:209)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:316)
	at java.base/java.lang.Thread.run(Thread.java:840)
2024-12-02 09:50:09 SEVERE [org.csstudio.display.builder.model] Unknown listener org.csstudio.display.builder.representation.ToolkitRepresentation$$Lambda$812/0x00007f3be0487560@4006f5df
java.lang.Exception: Unknown listener
	at org.csstudio.display.builder.model.properties.PropertyChangeHandler.removePropertyListener(PropertyChangeHandler.java:119)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:398)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.dispose(EmbeddedDisplayRepresentation.java:491)
	at org.csstudio.display.builder.representation.WidgetRepresentation.destroy(WidgetRepresentation.java:88)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeWidget(ToolkitRepresentation.java:435)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeChildren(ToolkitRepresentation.java:410)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:394)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.lambda$updatePendingDisplay$0(EmbeddedDisplayRepresentation.java:306)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:316)
	at java.base/java.lang.Thread.run(Thread.java:840)

2024-12-02 09:50:09 WARNING [org.csstudio.display.builder.representation] Failed to handle embedded display sub.bob
java.util.concurrent.ExecutionException: java.lang.NullPointerException
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205)
	at org.csstudio.display.builder.representation.EmbeddedDisplayRepresentationUtil.checkCompletion(EmbeddedDisplayRepresentationUtil.java:243)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.updatePendingDisplay(EmbeddedDisplayRepresentation.java:309)
	at org.phoebus.framework.jobs.Job.execute(Job.java:50)
	at org.phoebus.framework.jobs.JobManager.execute(JobManager.java:54)
	at org.phoebus.framework.jobs.JobManager.lambda$schedule$0(JobManager.java:45)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:209)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:400)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.dispose(EmbeddedDisplayRepresentation.java:491)
	at org.csstudio.display.builder.representation.WidgetRepresentation.destroy(WidgetRepresentation.java:88)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeWidget(ToolkitRepresentation.java:435)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeChildren(ToolkitRepresentation.java:410)
	at org.csstudio.display.builder.representation.ToolkitRepresentation.disposeRepresentation(ToolkitRepresentation.java:394)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:663)
	at org.csstudio.display.builder.representation.javafx.JFXRepresentation.disposeRepresentation(JFXRepresentation.java:115)
	at org.csstudio.display.builder.representation.javafx.widgets.EmbeddedDisplayRepresentation.lambda$updatePendingDisplay$0(EmbeddedDisplayRepresentation.java:306)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:316)
	... 1 more

Any help is appreciated!

@kasemir
Copy link
Collaborator

kasemir commented Dec 2, 2024

May be related to #3063

@abrahamwolk
Copy link
Collaborator

@UrbanBobek On a cursory glance this looks like the bug that I fixed in #3063.

Which version of Phoebus are you testing this on? Does the issue persist if you run from the current master branch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants