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). ------------- Commit messages: - add test case - convert CardImpl finalizer to use Cleaner Changes: https://git.openjdk.org/jdk/pull/30683/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30683&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8380391 Stats: 303 lines in 4 files changed: 206 ins; 50 del; 47 mod Patch: https://git.openjdk.org/jdk/pull/30683.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/30683/head:pull/30683 PR: https://git.openjdk.org/jdk/pull/30683
