> 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 incrementally with one additional commit since the last revision: update example code in javax.smartcardio package doc to use try-finally ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30683/files - new: https://git.openjdk.org/jdk/pull/30683/files/4788c321..95937ea6 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30683&range=04 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30683&range=03-04 Stats: 9 lines in 1 file changed: 3 ins; 0 del; 6 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
