> 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

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/30683/files
  - new: https://git.openjdk.org/jdk/pull/30683/files/95937ea6..fce7e3f9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=30683&range=05
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30683&range=04-05

  Stats: 88910 lines in 2204 files changed: 47708 ins; 25904 del; 15298 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

Reply via email to