On Mon, 4 Jul 2022 09:31:05 GMT, Maxim Kartashev <[email protected]> wrote:

> Java2D's `Disposer` maintains a record of objects to dispose of with the help 
> of a collection that isn't thread safe. When `DisposerRecords` objects are 
> being added to it at the same time as others are being disposed on the 
> Toolkit thread, chaos ensues.
> 
> This commit replaces the collection with a thread-safe  one, more 
> consistently guards against exceptions in individual disposers, and adds 
> exception's stacktraces printing in order to facilitate said exceptions' 
> debugging, which are otherwise hard to pinpoint without code modification. 
> 
> Originally, the bug was caught on MacOS running an existing test 
> (`DrawRotatedStringUsingRotatedFont`) that would occasionally crash the VM 
> (probably due to double-free detected by libc that abort()'s in this case). 
> It may take many re-tries to reproduce and this wasn't  observed on Linux. 
> The new test (`test/jdk/sun/java2d/Disposer/TestDisposerRace.java`) displays 
> the problem in a more reliable fashion and fails both on MacOS and Linux 
> without this fix.

This pull request has now been integrated.

Changeset: 00decca4
Author:    Maxim Kartashev <[email protected]>
Committer: Alexey Ushakov <[email protected]>
URL:       
https://git.openjdk.org/jdk/commit/00decca46a77ea9390081655b069008aacfea525
Stats:     141 lines in 3 files changed: 120 ins; 5 del; 16 mod

8289208: Test DrawRotatedStringUsingRotatedFont.java occasionally crashes on 
MacOS

Reviewed-by: prr, avu

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

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

Reply via email to