[9] RFR (XS) 8044339: wrong comment for FilterSpuriousWakeups option

David Holmes david.holmes at oracle.com
Fri May 30 06:03:07 UTC 2014

Hi Lev,

On 30/05/2014 4:33 AM, Lev Priima wrote:
> Please review and help me with integration:
> diff -r 102506d9d873 src/share/vm/runtime/globals.hpp
> --- a/src/share/vm/runtime/globals.hpp    Wed May 28 14:42:00 2014 +0400
> +++ b/src/share/vm/runtime/globals.hpp    Thu May 29 22:29:37 2014 +0400
> @@ -1144,7 +1144,7 @@
> \
>     product(bool, FilterSpuriousWakeups,
> true,                                \
>             "Prevent spurious or premature wakeups from object.wait
> "         \
> -          "(Solaris
> only)")                                                 \
> +          "(Ignored for
> Windows)")                                          \
> \

Sorry to make life complicated but as I put in the bug report:

The "Solaris" part dates from the days when Solaris meant "not Windows". :)

A bigger problem here is that the main part of the description:

"Prevent spurious or premature wakeups from object.wait "

may not match what people expect - it depends on whether "filter" means 
to remove the item being filtered, or to keep only the item being 
filtered. It would clearer if it read "When true prevents ..." but even 
then it is not accurate as this only excludes spurious wakeups from the 
OS pthread_cond[timed]wait implementation - the JVM can still induce its 
own "spurious wakeups". So the better description would be:

"When true prevents OS-level spurious, or premature, wakeups from 

But it should also be noted that where this flag is checked there is an 
even more inaccurate comment:

   // The underlying Solaris implementation, cond_timedwait, admits
   // spurious/premature wakeups, but the JLS/JVM spec prevents the
   // JVM from making those visible to Java code.

Ironically this comment appears in the linux and bsd versions but not 
the Solaris one! Further it is incorrect - the JLS/JVMS does not prevent 
spurious wakeups from being made visible to Java code. That has always 
been the intent but it took until Java 5 before we got the specification 
for Object.wait updated to make it clear.

So really this is all legacy crud that should be removed along with the 
other planned cleanups (ie removing the safe_cond_* functions and 
WorkAroundNPTLTimedWaitHang) and the os_posix refactoring.


Sorry to mess up your "starter" bug.


>     product(intx, NativeMonitorTimeout, -1,
> "(Unstable)")                     \
> \
> bug: https://bugs.openjdk.java.net/browse/JDK-8044339

More information about the hotspot-runtime-dev mailing list