On Tue, 8 Dec 2020 18:53:30 GMT, Mandy Chung <mch...@openjdk.org> wrote:

>> `Reference::isEnqueued` method was never implemented as it was initially 
>> specified since 1.2. The specification says that it tests if this reference 
>> object has been enqueued, but the long-standing behavior is to test if this 
>> reference object is in its associated queue, only reflecting the state at 
>> the time when this method is executed. The implementation doesn't do what 
>> the specification promised, which might cause serious bugs if unnoticed. For 
>> example, an application that relies on this method to release critical 
>> resources could cause serious performance issues, in particular when this 
>> method is misused on Reference objects without an associated queue.  
>> `Reference::refersTo(null)` is the better recommended way to test if a 
>> Reference object has been cleared.
>> 
>> This proposes to deprecate `Reference::isEnqueued`.  Also the spec is 
>> updated to match the long-standing behavior.
>> 
>> CSR: https://bugs.openjdk.java.net/browse/JDK-8189386
>
> Mandy Chung 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 four additional 
> commits since the last revision:
> 
>  - Merge branch 'master' of https://github.com/openjdk/jdk into isEnqueued
>  - Merge branch 'master' of https://github.com/openjdk/jdk into isEnqueued
>  - add suppress warnings
>  - 8052260: Reference.isEnqueued() spec does not match the long-standing 
> behavior returning true iff it's in the ref queue

src/java.base/share/classes/java/lang/ref/Reference.java line 430:

> 428:      * This method was never implemented to test if a reference object 
> has
> 429:      * been cleared and enqueued as it was previously specified since 
> 1.2.
> 430:      * This method could be misused due to the inherent race condition

A small suggestion is to restructure the first sentence of the deprecated 
message to say "This method was originally specified to test .. but was never 
implemented to do this test", otherwise looks okay.

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

PR: https://git.openjdk.java.net/jdk/pull/1684

Reply via email to