RFR: 8252713: jtreg time out of CtrlASCII.java seems to hang the Xserver.

Alexander Zvegintsev azvegint at openjdk.org
Thu Nov 17 20:51:19 UTC 2022


On Thu, 17 Nov 2022 19:43:14 GMT, Phil Race <prr at openjdk.org> wrote:

> Although I wonder if that wouldn't be a bug in the collections classes ?

Don't think so, 

* `invokeAndWait` is called on main thread while holding lock on the hashtable
* synchronized `Hastable#containsKey` method is called on EDT

So EDT is blocked by hashtable, main is waiting while event posted to EDT will be processed.

stacktraces are below:

> "main" #1 [223509] prio=5 os_prio=0 cpu=646,16ms elapsed=70,88s tid=0x00007fe2d4029a70 nid=223509 in Object.wait()  [0x00007fe2d9449000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0(java.base at 20-ea/Native Method)
        - waiting on <0x0000000629436510> (a java.awt.EventQueue$1AWTInvocationLock)
        at java.lang.Object.wait(java.base at 20-ea/Object.java:366)
        at java.lang.Object.wait(java.base at 20-ea/Object.java:339)
        **at java.awt.EventQueue.invokeAndWait(java.desktop at 20-ea/EventQueue.java:1365)**
        - locked <0x0000000629436510> (a java.awt.EventQueue$1AWTInvocationLock)
        at java.awt.EventQueue.invokeAndWait(java.desktop at 20-ea/EventQueue.java:1346)
        at sun.awt.SunToolkit.realSync(java.desktop at 20-ea/SunToolkit.java:1492)
        at sun.awt.SunToolkit.realSync(java.desktop at 20-ea/SunToolkit.java:1438)
        at java.awt.Robot.waitForIdle(java.desktop at 20-ea/Robot.java:688)
        - locked <0x0000000629428d30> (a java.awt.Robot)
        at java.awt.Robot.autoWaitForIdle(java.desktop at 20-ea/Robot.java:619)
        at java.awt.Robot.afterEvent(java.desktop at 20-ea/Robot.java:592)
        at java.awt.Robot.keyRelease(java.desktop at 20-ea/Robot.java:371)
        - locked <0x0000000629428d30> (a java.awt.Robot)
        at CtrlASCII.punchCtrlKey(CtrlASCII.java:225)
        at CtrlASCII.lambda$start$0(CtrlASCII.java:202)
        at CtrlASCII$$Lambda$343/0x0000000801151088.accept(Unknown Source)
        **at java.util.Hashtable.forEach(java.base at 20-ea/Hashtable.java:893)
        - locked <0x00000006298b6b40> (a java.util.Hashtable)**
        at CtrlASCII.start(CtrlASCII.java:201)
        at CtrlASCII.main(CtrlASCII.java:162)
        at java.lang.invoke.LambdaForm$DMH/0x0000000801030c00.invokeStatic(java.base at 20-ea/LambdaForm$DMH)
        at java.lang.invoke.LambdaForm$MH/0x0000000801158000.invoke(java.base at 20-ea/LambdaForm$MH)
        at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base at 20-ea/Invokers$Holder)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base at 20-ea/DirectMethodHandleAccessor.java:155)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base at 20-ea/DirectMethodHandleAccessor.java:104)
        at java.lang.reflect.Method.invoke(java.base at 20-ea/Method.java:578)
        at com.sun.tools.javac.launcher.Main.execute(jdk.compiler at 20-ea/Main.java:435)
        at com.sun.tools.javac.launcher.Main.run(jdk.compiler at 20-ea/Main.java:205)
        at com.sun.tools.javac.launcher.Main.main(jdk.compiler at 20-ea/Main.java:132)

> "AWT-EventQueue-0" #43 [223550] prio=6 os_prio=0 cpu=26,14ms elapsed=70,34s tid=0x00007fe21c006200 nid=223550 waiting for monitor entry  [0x00007fe2a02e7000]
java.lang.Thread.State: BLOCKED (on object monitor)
      **at java.util.Hashtable.containsKey(java.base at 20-ea/Hashtable.java:352)**
      - **waiting to lock <0x00000006298b6b40>** (a java.util.Hashtable)
      at CtrlASCII.keyTyped(CtrlASCII.java:241)
      at java.awt.Component.processKeyEvent(java.desktop at 20-ea/Component.java:6575)
      at java.awt.Component.processEvent(java.desktop at 20-ea/Component.java:6397)
      at java.awt.TextComponent.processEvent(java.desktop at 20-ea/TextComponent.java:694)
      at java.awt.TextField.processEvent(java.desktop at 20-ea/TextField.java:637)
      at java.awt.Component.dispatchEventImpl(java.desktop at 20-ea/Component.java:4995)
      at java.awt.Component.dispatchEvent(java.desktop at 20-ea/Component.java:4827)
      at java.awt.KeyboardFocusManager.redispatchEvent(java.desktop at 20-ea/KeyboardFocusManager.java:1952)
      at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(java.desktop at 20-ea/DefaultKeyboardFocusManager.java:883)
      at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(java.desktop at 20-ea/DefaultKeyboardFocusManager.java:1146)
      at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(java.desktop at 20-ea/DefaultKeyboardFocusManager.java:1020)
      at java.awt.DefaultKeyboardFocusManager.dispatchEvent(java.desktop at 20-ea/DefaultKeyboardFocusManager.java:848)
      at java.awt.Component.dispatchEventImpl(java.desktop at 20-ea/Component.java:4876)
      at java.awt.Container.dispatchEventImpl(java.desktop at 20-ea/Container.java:2324)
      at java.awt.Window.dispatchEventImpl(java.desktop at 20-ea/Window.java:2780)
      at java.awt.Component.dispatchEvent(java.desktop at 20-ea/Component.java:4827)
      at java.awt.EventQueue.dispatchEventImpl(java.desktop at 20-ea/EventQueue.java:775)
      at java.awt.EventQueue$4.run(java.desktop at 20-ea/EventQueue.java:720)
      at java.awt.EventQueue$4.run(java.desktop at 20-ea/EventQueue.java:714)
      at java.security.AccessController.executePrivileged(java.base at 20-ea/AccessController.java:778)
      at java.security.AccessController.doPrivileged(java.base at 20-ea/AccessController.java:400)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base at 20-ea/ProtectionDomain.java:87)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base at 20-ea/ProtectionDomain.java:98)
      at java.awt.EventQueue$5.run(java.desktop at 20-ea/EventQueue.java:747)
      at java.awt.EventQueue$5.run(java.desktop at 20-ea/EventQueue.java:745)
      at java.security.AccessController.executePrivileged(java.base at 20-ea/AccessController.java:778)
      at java.security.AccessController.doPrivileged(java.base at 20-ea/AccessController.java:400)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base at 20-ea/ProtectionDomain.java:87)
      at java.awt.EventQueue.dispatchEvent(java.desktop at 20-ea/EventQueue.java:744)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop at 20-ea/EventDispatchThread.java:203)
      at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop at 20-ea/EventDispatchThread.java:124)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop at 20-ea/EventDispatchThread.java:113)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop at 20-ea/EventDispatchThread.java:109)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop at 20-ea/EventDispatchThread.java:101)
      at java.awt.EventDispatchThread.run(java.desktop at 20-ea/EventDispatchThread.java:90)

-------------

PR: https://git.openjdk.org/jdk/pull/11214



More information about the client-libs-dev mailing list