[jboss-cvs] JBossAS SVN: r91124 - projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 10 22:14:45 EDT 2009


Author: david.lloyd at jboss.com
Date: 2009-07-10 22:14:45 -0400 (Fri, 10 Jul 2009)
New Revision: 91124

Modified:
   projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/TempFileProvider.java
Log:
Cleaner close mgmt

Modified: projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/TempFileProvider.java
===================================================================
--- projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/TempFileProvider.java	2009-07-11 01:58:38 UTC (rev 91123)
+++ projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/TempFileProvider.java	2009-07-11 02:14:45 UTC (rev 91124)
@@ -29,6 +29,7 @@
 import java.io.FileOutputStream;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.Random;
 import java.security.SecureRandom;
 
@@ -39,6 +40,7 @@
 {
    private static final String TMP_DIR_PROPERTY = "jboss.server.temp.dir";
    private static final File TMP_ROOT;
+   private final AtomicBoolean open = new AtomicBoolean(true);
 
    static {
       final String configTmpDir = System.getProperty(TMP_DIR_PROPERTY);
@@ -113,6 +115,9 @@
     * @throws IOException if an error occurs
     */
    public File createTempFile(String originalName, int hashCode) throws IOException {
+      if (! open.get()) {
+         throw new IOException("Temp file provider closed");
+      }
       File root = providerRoot;
       for (int i = 0; i < hashDepth; i ++) {
          final int dc = hashCode & 0x7f;
@@ -134,6 +139,9 @@
     * @throws IOException if an error occurs
     */
    public File createTempFile(String originalName, int hashCode, InputStream sourceData) throws IOException {
+      if (! open.get()) {
+         throw new IOException("Temp file provider closed");
+      }
       final File tempFile = createTempFile(originalName, hashCode);
       boolean ok = false;
       try {
@@ -191,18 +199,25 @@
     */
    public void close() throws IOException
    {
-      final Runnable task = new Runnable()
-      {
-         public void run()
+      if (open.getAndSet(false)) {
+         final Runnable task = new Runnable()
          {
-            if (! recursiveDelete(providerRoot)) {
-               executor.schedule(this, 30L, TimeUnit.SECONDS);
+            public void run()
+            {
+               if (! recursiveDelete(providerRoot)) {
+                  executor.schedule(this, 30L, TimeUnit.SECONDS);
+               }
             }
-         }
-      };
-      task.run();
+         };
+         task.run();
+      }
    }
 
+   protected void finalize()
+   {
+      VFSUtils.safeClose(this);
+   }
+
    private static boolean recursiveDelete(File root) {
       boolean ok = true;
       if (root.isDirectory()) {




More information about the jboss-cvs-commits mailing list