You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/08/31 21:11:54 UTC

svn commit: r809694 - /commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryMapProvider.java

Author: mturk
Date: Mon Aug 31 19:11:54 2009
New Revision: 809694

URL: http://svn.apache.org/viewvc?rev=809694&view=rev
Log:
Implement common exception throw mechanism - Always clean up, but remember exceptions on the way

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryMapProvider.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryMapProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryMapProvider.java?rev=809694&r1=809693&r2=809694&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryMapProvider.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryMapProvider.java Mon Aug 31 19:11:54 2009
@@ -98,6 +98,7 @@
     public void close()
         throws IOException
     {
+        Throwable ce = null;
         for (Enumeration<Pointer> e = mappedRegions.elements(); e.hasMoreElements();) {
             try {
                 Pointer ptr = e.nextElement();
@@ -109,12 +110,21 @@
                 if (!ptr.isNull()) {
                     ptr.free();
                 }
-            } catch (Throwable t) {
-                // TODO: Collect and rethrow at the end.
-                //
+            } catch (Throwable te) {
+                if (ce == null)
+                    ce = te;
             }
         }
         mappedRegions.clear();
-        map.close();
+        if (map.valid())
+            map.close();
+        else
+            throw new ClosedDescriptorException();
+        if (ce != null) {
+            /* One of the pointers has thrown an Exception.
+             * Rethrow as IOException
+             */
+            throw new IOException(ce.getMessage());
+        }
     }
 }