Hold instances of DiskCache with weak refs to allow early cleanup. Review by: bobv (TBR) git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5170 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/util/DiskCache.java b/dev/core/src/com/google/gwt/dev/util/DiskCache.java index c1bd2b5..76ca9db 100644 --- a/dev/core/src/com/google/gwt/dev/util/DiskCache.java +++ b/dev/core/src/com/google/gwt/dev/util/DiskCache.java
@@ -18,6 +18,7 @@ import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -43,16 +44,19 @@ private static class Shutdown implements Runnable { public void run() { - for (DiskCache diskCache : shutdownList) { + for (WeakReference<DiskCache> ref : shutdownList) { try { - diskCache.finalize(); + DiskCache diskCache = ref.get(); + if (diskCache != null) { + diskCache.finalize(); + } } catch (Throwable e) { } } } } - private static List<DiskCache> shutdownList; + private static List<WeakReference<DiskCache>> shutdownList; private boolean atEnd = true; private RandomAccessFile file; @@ -64,9 +68,10 @@ file = new RandomAccessFile(temp, "rw"); file.setLength(0); if (shutdownList == null) { - shutdownList = new ArrayList<DiskCache>(); + shutdownList = new ArrayList<WeakReference<DiskCache>>(); Runtime.getRuntime().addShutdownHook(new Thread(new Shutdown())); } + shutdownList.add(new WeakReference<DiskCache>(this)); } catch (IOException e) { throw new RuntimeException("Unable to initialize byte cache", e); }