提交 02b91ecc authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 9038f7a4
...@@ -359,9 +359,7 @@ public class SysProperties { ...@@ -359,9 +359,7 @@ public class SysProperties {
* System property <code>h2.reuseSpaceQuickly</code> (default: true).<br /> * System property <code>h2.reuseSpaceQuickly</code> (default: true).<br />
* Reuse space in database files quickly. * Reuse space in database files quickly.
*/ */
int test; public static final boolean REUSE_SPACE_QUICKLY = getBooleanSetting("h2.reuseSpaceQuickly", true);
// public static final boolean REUSE_SPACE_QUICKLY = getBooleanSetting("h2.reuseSpaceQuickly", true);
public static final boolean REUSE_SPACE_QUICKLY = getBooleanSetting("h2.reuseSpaceQuickly", false);
/** /**
* System property <code>h2.runFinalize</code> (default: true).<br /> * System property <code>h2.runFinalize</code> (default: true).<br />
......
...@@ -77,8 +77,8 @@ public class FileSystemMemory extends FileSystem { ...@@ -77,8 +77,8 @@ public class FileSystemMemory extends FileSystem {
for (int i = 0;; i++) { for (int i = 0;; i++) {
int test; int test;
String n = name + RandomUtils.getSecureLong() + suffix; // String n = name + RandomUtils.getSecureLong() + suffix;
// String n = name + i + suffix; String n = name + i + suffix;
if (!exists(n)) { if (!exists(n)) {
......
...@@ -193,4 +193,8 @@ public class FileUtils { ...@@ -193,4 +193,8 @@ public class FileUtils {
FileSystem.getInstance(fileName).delete(fileName); FileSystem.getInstance(fileName).delete(fileName);
} }
public static long getLastModified(String fileName) {
return FileSystem.getInstance(fileName).getLastModified(fileName);
}
} }
...@@ -20,22 +20,38 @@ public class TempFileDeleter { ...@@ -20,22 +20,38 @@ public class TempFileDeleter {
private static final ReferenceQueue QUEUE = new ReferenceQueue(); private static final ReferenceQueue QUEUE = new ReferenceQueue();
private static final HashMap REF_MAP = new HashMap(); private static final HashMap REF_MAP = new HashMap();
private static class TempFile {
String fileName;
long lastModified;
}
public static synchronized Reference addFile(String fileName, Object file) { public static synchronized Reference addFile(String fileName, Object file) {
FileUtils.trace("TempFileDeleter.addFile", fileName, file); FileUtils.trace("TempFileDeleter.addFile", fileName, file);
PhantomReference ref = new PhantomReference(file, QUEUE); PhantomReference ref = new PhantomReference(file, QUEUE);
REF_MAP.put(ref, fileName); TempFile f = new TempFile();
f.fileName = fileName;
f.lastModified = FileUtils.getLastModified(fileName);
REF_MAP.put(ref, f);
deleteUnused(); deleteUnused();
return ref; return ref;
} }
public static synchronized void deleteFile(Reference ref, String fileName) { public static synchronized void deleteFile(Reference ref, String fileName) {
if (ref != null) { if (ref != null) {
String f2 = (String) REF_MAP.remove(ref); TempFile f2 = (TempFile) REF_MAP.remove(ref);
if (SysProperties.CHECK && f2 != null && fileName != null && !f2.equals(fileName)) { if (f2 != null) {
throw Message.getInternalError("f2:" + f2 + " f:" + fileName); if (SysProperties.CHECK && fileName != null && !f2.fileName.equals(fileName)) {
throw Message.getInternalError("f2:" + f2.fileName + " f:" + fileName);
}
fileName = f2.fileName;
long mod = FileUtils.getLastModified(fileName);
if (mod != f2.lastModified) {
// the file has been deleted and a new one created
// or it has been modified afterwards
return;
}
} }
fileName = f2;
} }
if (fileName != null && FileUtils.exists(fileName)) { if (fileName != null && FileUtils.exists(fileName)) {
try { try {
...@@ -64,9 +80,9 @@ public class TempFileDeleter { ...@@ -64,9 +80,9 @@ public class TempFileDeleter {
public static void stopAutoDelete(Reference ref, String fileName) { public static void stopAutoDelete(Reference ref, String fileName) {
FileUtils.trace("TempFileDeleter.stopAutoDelete", fileName, ref); FileUtils.trace("TempFileDeleter.stopAutoDelete", fileName, ref);
if (ref != null) { if (ref != null) {
String f2 = (String) REF_MAP.remove(ref); TempFile f2 = (TempFile) REF_MAP.remove(ref);
if (SysProperties.CHECK && (f2 == null || !f2.equals(fileName))) { if (SysProperties.CHECK && (f2 == null || !f2.fileName.equals(fileName))) {
throw Message.getInternalError("f2:" + f2 + " f:" + fileName); throw Message.getInternalError("f2:" + f2.fileName + " f:" + fileName);
} }
} }
deleteUnused(); deleteUnused();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论