83 lines · 3.0 KB · Java
RawDownload
/* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */package java.io; import java.util.*;import java.io.File; /** * This class holds a set of filenames to be deleted on VM exit through a shutdown hook. * A set is used both to prevent double-insertion of the same file as well as offer * quick removal. */ class DeleteOnExitHook {    private static LinkedHashSet<String> files = new LinkedHashSet<>();    static {        // DeleteOnExitHook must be the last shutdown hook to be invoked.        // Application shutdown hooks may add the first file to the        // delete on exit list and cause the DeleteOnExitHook to be        // registered during shutdown in progress. So set the        // registerShutdownInProgress parameter to true.        sun.misc.SharedSecrets.getJavaLangAccess()            .registerShutdownHook(2 /* Shutdown hook invocation order */,                true /* register even if shutdown in progress */,                new Runnable() {                    public void run() {                       runHooks();                    }                }        );    }     private DeleteOnExitHook() {}     static synchronized void add(String file) {        if(files == null) {            // DeleteOnExitHook is running. Too late to add a file            throw new IllegalStateException("Shutdown in progress");        }         files.add(file);    }     static void runHooks() {        LinkedHashSet<String> theFiles;         synchronized (DeleteOnExitHook.class) {            theFiles = files;            files = null;        }         ArrayList<String> toBeDeleted = new ArrayList<>(theFiles);         // reverse the list to maintain previous jdk deletion order.        // Last in first deleted.        Collections.reverse(toBeDeleted);        for (String filename : toBeDeleted) {            (new File(filename)).delete();        }    }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t