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
