[11] RFR JDK-8198249: Remove deprecated Runtime::runFinalizersOnExit and System::runFinalizersOnExit

mandy chung mandy.chung at oracle.com
Thu Feb 22 02:28:57 UTC 2018



On 2/21/18 6:08 PM, David Holmes wrote:
> Hi Mandy,
>
> tl;dr: I think this is now good to go.
>
> On 22/02/2018 5:58 AM, mandy chung wrote:
>> Here is the updated webrev:
>> http://cr.openjdk.java.net/~mchung/jdk11/webrevs/8198249/webrev.04/
>>
>> I added some comments to clarify the implementation.
>
> src/java.base/share/classes/java/lang/Shutdown.java
>
>  96                 if (VM.isShutdown()|| slot <= currentRunningHook)
>
> Nit: need space after ()
>
>

Fixed.

>  113 private static void runHooks() {
>  114         synchronized (lock) {
>  115             /* Guard against the possibility of a daemon thread 
> invoking exit
>  116              * after DestroyJavaVM initiates the shutdown sequence
>  117              */
>  118             if (VM.isShutdown()) return;
>  119         }
>
> I think this is actually impossible to hit, but that's a separate 
> cleanup.

When T1 is calling runHooks, T2 calls exit and blocks on Shutdown.class, 
once T1 releases the lock if VM does not halt yet, T2 will enter this 
method.
>
>  139         // set shutdown state
>  140         VM.shutdown();
>
> Just an observation that we consider "shutdown" to be after all system 
> shutdown hooks are run. So this (contrary to what I wrote in the CSR) 
> narrows the window in which a concurrent exit(-1) would trigger an 
> immediate halt rather than a hang. Which in turn strengthens the 
> argument for just dropping that behaviour.

If an application hook calls exit(0), it will hang (not the thread 
holding the Shutdown class lock).  Do you want to file an issue to track 
that?

>
> ---
>
> src/java.base/share/classes/jdk/internal/misc/VM.java
>
>  103     public static void shutdown() {
>  104         initLevel(SYSTEM_SHUTDOWN);
>  105     }
>
> Doing this is exactly what I meant by my previous comments.
>

Good.

Thanks for the thorough review.
Mandy



More information about the core-libs-dev mailing list