On Sat, 3 Oct 2020 00:03:07 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
> The "discardingMouseEvents" flag in the SunDragSourceContextPeer class is > used on the different threads without any > synchronization. As far as I can see, the only effect `volatile` has here is making sure the successive calls to `checkEvent` eventually get the updated value of `discardingMouseEvents`. This does not seem to resolve the original race: calls to `checkEvent` can still see old values of `discardingMouseEvents` for a while, therefore some events can still leak. Turning the flag `volatile` makes it less likely, which might drop the error frequency under the testability threshold. Still, it might be good as the stop-gap. The iron-clad fix would be to synchronously insert something like `DiscardMouseEvent` on the beginning of event queue, and `AcceptMouseEvent` at the end of it, and let the `EventQueue` processor thread manage the flag -- so that `EventQueue` serializes everything, like it is designed to? ------------- Marked as reviewed by shade (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/491