<AWT Dev> [9] Review Request JDK-6980209: Make tracking SecondaryLoop.enter/exit methods easier
Semyon Sadetsky
semyon.sadetsky at oracle.com
Thu Mar 26 14:49:43 UTC 2015
Hello,
Please review fix for JDK9.
Bug: https://bugs.openjdk.java.net/browse/JDK-6980209#comment-13623256
Webrev:
http://cr.openjdk.java.net/~alexsch/semyon-sadetsky/6980209/webrev.00/
***The root cause:
There are 2 issues in WaitDispatchSupport:
1. If exit() is called before the secondary loop just silently never
ends. That is pointed in the summary.
2. In the same spec it is proposed to call exit() and enter()
concurrently but they are not thread-safe. That is an additional issue.
To fix 1: I support Artem's proposal for enter() to return false
immidiately in case if disordered exit() detected.
To fix 2: WaitDispatchSupport need to be reworked to allow concurrent
execution. Unfortunately we cannot synchronize EDT with another thread,
so the secondary loop launching cannot be run atomically. And this is
very sensitive area because of potential possibility to block EDT. Right
testing of the fix is very desirable.
***Solution description:
1. User immediately get false as result of enter() if it is detected
that exit() has been run either before or concurrently. For that purpose
a new AtomicBoolean field prematureExit is introduced.
2. The exit() and enter() are reworked to be capable to run concurrently
and avoid EDT jam in the secondary loop. See comments to the code for
details.
***Testing:
Test launches the secondary loop upon a button press action triggered by
the Robot and simultaneously call exit() in a separate thread. The Robot
sends a big number of events (number is adjustable by ATTEMPTS constant)
to cover different concurrent states randomly. Along with that the Robot
sends a number of key events to ensure that UI is kept responsive and
all events are dispatched by EDT. The number of the sent key events is
tested to be equal to the number of processed events.
The test is run in different modes to test secondary loop launching from
EDT and non-EDT threads.
--Semyon
More information about the awt-dev
mailing list