test/jdk/java/util/zip/ZipFile/TestCleaner.java
author phh
Sat, 30 Nov 2019 14:33:05 -0800
changeset 59330 5b96c12f909d
parent 52305 52a97e06a5e3
permissions -rw-r--r--
8234541: C1 emits an empty message when it inlines successfully Summary: Use "inline" as the message when successfull Reviewed-by: thartmann, mdoerr Contributed-by: navy.xliu@gmail.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     1
/*
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     4
 *
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     7
 * published by the Free Software Foundation.
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     8
 *
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    13
 * accompanied this code).
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    14
 *
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    18
 *
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    21
 * questions.
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    22
 */
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    23
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    24
/* @test
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
    25
 * @bug 8185582 8197989
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
    26
 * @modules java.base/java.util.zip:open java.base/jdk.internal.vm.annotation
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    27
 * @summary Check the resources of Inflater, Deflater and ZipFile are always
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    28
 *          cleaned/released when the instance is not unreachable
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    29
 */
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    30
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    31
import java.io.*;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    32
import java.lang.reflect.*;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    33
import java.util.*;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    34
import java.util.zip.*;
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
    35
import jdk.internal.vm.annotation.DontInline;
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    36
import static java.nio.charset.StandardCharsets.US_ASCII;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    37
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    38
public class TestCleaner {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    39
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    40
    public static void main(String[] args) throws Throwable {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    41
        testDeInflater();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    42
        testZipFile();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    43
    }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    44
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    45
    private static long addrOf(Object obj) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    46
        try {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    47
            Field addr = obj.getClass().getDeclaredField("address");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    48
            if (!addr.trySetAccessible()) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    49
                return -1;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    50
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    51
            return addr.getLong(obj);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    52
        } catch (Exception x) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    53
            return -1;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    54
        }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    55
    }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    56
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    57
    // verify the "native resource" of In/Deflater has been cleaned
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    58
    private static void testDeInflater() throws Throwable {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    59
        Field zsRefDef = Deflater.class.getDeclaredField("zsRef");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    60
        Field zsRefInf = Inflater.class.getDeclaredField("zsRef");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    61
        if (!zsRefDef.trySetAccessible() || !zsRefInf.trySetAccessible()) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    62
            throw new RuntimeException("'zsRef' is not accesible");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    63
        }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    64
        if (addrOf(zsRefDef.get(new Deflater())) == -1 ||
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    65
            addrOf(zsRefInf.get(new Inflater())) == -1) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    66
            throw new RuntimeException("'addr' is not accesible");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    67
        }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    68
        List<Object> list = new ArrayList<>();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    69
        byte[] buf1 = new byte[1024];
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    70
        byte[] buf2 = new byte[1024];
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    71
        for (int i = 0; i < 10; i++) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    72
            var def = new Deflater();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    73
            list.add(zsRefDef.get(def));
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    74
            def.setInput("hello".getBytes());
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    75
            def.finish();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    76
            int n = def.deflate(buf1);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    77
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    78
            var inf = new Inflater();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    79
            list.add(zsRefInf.get(inf));
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    80
            inf.setInput(buf1, 0, n);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    81
            n = inf.inflate(buf2);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    82
            if (!"hello".equals(new String(buf2, 0, n))) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    83
                throw new RuntimeException("compression/decompression failed");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    84
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    85
        }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    86
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    87
        int n = 10;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    88
        long cnt = list.size();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    89
        while (n-- > 0 && cnt != 0) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    90
            Thread.sleep(100);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    91
            System.gc();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    92
            cnt = list.stream().filter(o -> addrOf(o) != 0).count();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    93
        }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    94
        if (cnt != 0)
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    95
            throw new RuntimeException("cleaner failed to clean : " + cnt);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    96
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    97
    }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
    98
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
    99
    @DontInline
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   100
    private static Object openAndCloseZipFile(File zip) throws Throwable {
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   101
        try {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   102
            try (var fos = new FileOutputStream(zip);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   103
                 var zos = new ZipOutputStream(fos)) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   104
                zos.putNextEntry(new ZipEntry("hello"));
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   105
                zos.write("hello".getBytes(US_ASCII));
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   106
                zos.closeEntry();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   107
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   108
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   109
            var zf = new ZipFile(zip);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   110
            var es = zf.entries();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   111
            while (es.hasMoreElements()) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   112
                zf.getInputStream(es.nextElement()).read();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   113
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   114
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   115
            Field fieldRes = ZipFile.class.getDeclaredField("res");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   116
            if (!fieldRes.trySetAccessible()) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   117
                throw new RuntimeException("'ZipFile.res' is not accesible");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   118
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   119
            Object zfRes = fieldRes.get(zf);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   120
            if (zfRes == null) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   121
                throw new RuntimeException("'ZipFile.res' is null");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   122
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   123
            Field fieldZsrc = zfRes.getClass().getDeclaredField("zsrc");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   124
            if (!fieldZsrc.trySetAccessible()) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   125
                throw new RuntimeException("'ZipFile.zsrc' is not accesible");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   126
            }
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   127
            return fieldZsrc.get(zfRes);
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   128
        } finally {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   129
            zip.delete();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   130
        }
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   131
    }
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   132
50417
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   133
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   134
    private static void testZipFile() throws Throwable {
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   135
        File dir = new File(System.getProperty("test.dir", "."));
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   136
        File zip = File.createTempFile("testzf", "zip", dir);
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   137
aad24ac930ee 8197989: java/util/zip/ZipFile/TestCleaner.java failed with "cleaner failed to clean zipfile
sherman
parents: 48238
diff changeset
   138
        Object zsrc = openAndCloseZipFile(zip);
48238
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   139
        if (zsrc != null) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   140
            Field zfileField = zsrc.getClass().getDeclaredField("zfile");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   141
            if (!zfileField.trySetAccessible()) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   142
                throw new RuntimeException("'ZipFile.Source.zfile' is not accesible");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   143
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   144
            //System.out.println("zffile: " +  zfileField.get(zsrc));
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   145
            int n = 10;
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   146
            while (n-- > 0 && zfileField.get(zsrc) != null) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   147
                System.out.println("waiting gc ... " + n);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   148
                System.gc();
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   149
                Thread.sleep(100);
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   150
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   151
            if (zfileField.get(zsrc) != null) {
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   152
                throw new RuntimeException("cleaner failed to clean zipfile.");
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   153
            }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   154
        }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   155
    }
9f225d4387e2 8185582: Update Zip implementation to use Cleaner, not finalizers
sherman
parents:
diff changeset
   156
}