From 7d3c3b33b8cb917411333aadfd9d74b1566f9aa9 Mon Sep 17 00:00:00 2001 From: Alexey Ushakov Date: Mon, 22 Sep 2025 15:42:46 +0200 Subject: [PATCH] JBR-9301 Vulkan: SwingSet2 crash window server Clear native peer on windowClosing in Frame object --- src/java.desktop/share/classes/java/awt/Window.java | 5 +++++ src/java.desktop/share/classes/sun/awt/AWTAccessor.java | 3 +++ src/java.desktop/unix/classes/sun/awt/wl/WLFramePeer.java | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/src/java.desktop/share/classes/java/awt/Window.java b/src/java.desktop/share/classes/java/awt/Window.java index 417ae8b5d6a3..c056123597ef 100644 --- a/src/java.desktop/share/classes/java/awt/Window.java +++ b/src/java.desktop/share/classes/java/awt/Window.java @@ -4373,6 +4373,11 @@ public class Window extends Container implements Accessible { } } + @Override + public void addWindowListener(Window w, WindowListener listener) { + w.addWindowListener(listener); + } + private static void dumpCounter(final String counterName, final double valPerSecond) { if (USE_COUNTERS) { doLog(String.format("%s per second: %.2f", counterName, valPerSecond), diff --git a/src/java.desktop/share/classes/sun/awt/AWTAccessor.java b/src/java.desktop/share/classes/sun/awt/AWTAccessor.java index 492a5f28ca76..bfef836ff25d 100644 --- a/src/java.desktop/share/classes/sun/awt/AWTAccessor.java +++ b/src/java.desktop/share/classes/sun/awt/AWTAccessor.java @@ -37,6 +37,7 @@ import java.awt.event.InputEvent; import java.awt.event.InvocationEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; +import java.awt.event.WindowListener; import java.awt.image.BufferStrategy; import java.awt.peer.ComponentPeer; @@ -337,6 +338,8 @@ public final class AWTAccessor { double getCounterPerSecond(Window w, String counterName); void dumpStats(Window w, boolean reset, StringBuilder sb); + + void addWindowListener(Window w, WindowListener listener); } /** diff --git a/src/java.desktop/unix/classes/sun/awt/wl/WLFramePeer.java b/src/java.desktop/unix/classes/sun/awt/wl/WLFramePeer.java index b4c302268c7a..7a694fd9ca06 100644 --- a/src/java.desktop/unix/classes/sun/awt/wl/WLFramePeer.java +++ b/src/java.desktop/unix/classes/sun/awt/wl/WLFramePeer.java @@ -26,6 +26,7 @@ package sun.awt.wl; import java.awt.*; +import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.peer.FramePeer; import sun.awt.AWTAccessor; @@ -42,6 +43,12 @@ public class WLFramePeer extends WLDecoratedPeer implements FramePeer { super(target, target.isUndecorated(), Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.ICONIFIED), Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)); + AWTAccessor.getWindowAccessor().addWindowListener(target, new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + getFrame().removeNotify(); + } + }); } @Override