<AWT Dev> numAppContexts in AppContext modified in not-thread-safe way.
David.Holmes at oracle.com
Fri Aug 19 04:16:33 PDT 2011
On 19/08/2011 6:40 PM, Clemens Eisserer wrote:
> Found a mistake, corrected version at:
> It ended up with numAppContexts=2 when class-initialization was done,
> although there was only one context.
The original code is rather strange. The static field will be default
initialized to zero, the AppContext constructor will increment it to 1, then
the static block explicitly sets it to one.
It would be cleaner/clearer if the field were declared and initialized
before the static block.
> It's not clear to me why this case needs to be handled specially. I also
> can't tell what code would be calling getAppContext under those conditions.
> From what I understand its a fast-path. For normal Swing Applications, no
> AppContexts are ever created (except the "system" context when
> AppContext.class is loaded -> numAppContexts=1), so the code avoids the
> look-up. I may have misunderstood it of course ;)
That's an uninteresting case from a data-race perspective though because the
counter is only ever written once.
However I now wonder about how often this gets called in a Swing app? If
this is a frequent call then the overhead of the atomic might be
significant. Perhaps the Swing folk should be evaluating this change as well?
> Thanks, Clemens
More information about the awt-dev