On Thu, 16 Apr 2026 22:28:53 GMT, Brent Christian <[email protected]> wrote:
>> This is a pull request to convert the finalizer in >> `sun.security.smartcardio.CardImpl` to use Cleaner instead. The relevant >> state is refactored into a Context object, in the standard fashion. >> >> This change uses the recommended `try`/`finally`/`reachabilityFence()` >> technique to prevent races between the program thread and the Cleaner >> thread, per the `Reference.reachabilityFence()` API Note: >> >>> _there is a race between the program thread running the method, and the >>> cleanup thread running the Cleaner or finalizer. The cleanup thread could >>> free a resource, followed by the program thread (still running the method) >>> attempting to access the now-already-freed resource. Use of >>> reachabilityFence can prevent this race by ensuring that the object remains >>> strongly reachable._ >> >> See >> [Reference.reachabilityFence()](https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/lang/ref/Reference.html#reachabilityFence(java.lang.Object)) >> and [java.lang.ref - Memory >> Visibility](https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/lang/ref/package-summary.html#memory-consistency-properties-heading) >> for details / background info. >> >> The test creates a `Card` object, and allows it to be collected. This >> confirms that the new cleaning action does not hold onto the Owner ("this") >> object, per the >> [Cleaner](https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/lang/ref/Cleaner.html) >> class API Note ("_it is important that the object implementing the cleaning >> action does not hold references to the object_"). >> >> I've tried to make the test similar to nearby JavaCard tests. I tried it on >> Windows using the latest JavaCard Simulator. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > Brent Christian has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains seven additional > commits since the last revision: > > - Merge branch 'master' into smartcardio > - update example code in javax.smartcardio package doc to use try-finally > - minor comment update > - add missed clean() calls, update comments > - fix imports and copyright years > - add test case > - convert CardImpl finalizer to use Cleaner test/jdk/sun/security/smartcardio/TestCleaner.java line 71: > 69: Card card = terminal.connect("*"); > 70: if (card == null) { > 71: System.out.println("Skipping the test: " + This should be a skipped exception imo, it will look like it's passed otherwise ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/30683#discussion_r3218650654
