On Mon, 1 Aug 2022 14:30:54 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.
>
> Maxim Kartashev has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Made DrawRotatedStringUsingRotatedFont.java headful and dropped extra test

Marked as reviewed by avu (Committer).

Yes, I've looked through the code. It looks good to me.

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

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

Reply via email to