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

Reply via email to