[Mulgara-svn] r794 - in trunk: . src/jar/util/java/org/mulgara/util src/jar/util-xa/java/org/mulgara/store/xa
alexhall at mulgara.org
alexhall at mulgara.org
Thu Apr 17 07:48:13 UTC 2008
Author: alexhall
Date: 2008-04-16 12:55:04 -0700 (Wed, 16 Apr 2008)
New Revision: 794
Modified:
trunk/.classpath
trunk/src/jar/util-xa/java/org/mulgara/store/xa/MappedBlockFile.java
trunk/src/jar/util/java/org/mulgara/util/MappedIntFile.java
Log:
Explicitly clean MappedByteBuffers to resolve Windows backup/restore issue.
Modified: trunk/.classpath
===================================================================
--- trunk/.classpath 2008-04-16 09:58:01 UTC (rev 793)
+++ trunk/.classpath 2008-04-16 19:55:04 UTC (rev 794)
@@ -1,135 +1,138 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src/jar/ant-task/java"/>
- <classpathentry kind="src" path="src/jar/resolver-distributed/java"/>
- <classpathentry kind="src" path="src/war/webui/java"/>
- <classpathentry kind="src" path="src/jar/doclet/java"/>
- <classpathentry kind="src" path="src/jar/descriptor/src/java"/>
- <classpathentry kind="src" path="src/jar/client-jrdf/java"/>
- <classpathentry kind="src" path="src/jar/content-mbox/java"/>
- <classpathentry kind="src" path="src/jar/content-mp3/java"/>
- <classpathentry kind="src" path="src/jar/content-n3/java"/>
- <classpathentry kind="src" path="src/jar/content-rdfxml/java"/>
- <classpathentry kind="src" path="src/jar/content-rio/java"/>
- <classpathentry kind="src" path="src/jar/demo-mp3/java"/>
- <classpathentry kind="src" path="src/jar/driver/java"/>
- <classpathentry kind="src" path="src/jar/dtd/java"/>
- <classpathentry kind="src" path="src/jar/itql/java"/>
- <classpathentry kind="src" path="src/jar/itql/sablecc"/>
- <classpathentry kind="src" path="src/jar/jrdf/java"/>
- <classpathentry kind="src" path="src/jar/krule/java"/>
- <classpathentry kind="src" path="src/jar/query/java"/>
- <classpathentry kind="src" path="src/jar/resolver/java"/>
- <classpathentry kind="src" path="src/jar/resolver-file/java"/>
- <classpathentry kind="src" path="src/jar/resolver-filesystem/java"/>
- <classpathentry kind="src" path="src/jar/resolver-gis/java"/>
- <classpathentry kind="src" path="src/jar/resolver-http/java"/>
- <classpathentry kind="src" path="src/jar/resolver-jar/java"/>
- <classpathentry kind="src" path="src/jar/resolver-lucene/java"/>
- <classpathentry kind="src" path="src/jar/resolver-memory/java"/>
- <classpathentry kind="src" path="src/jar/resolver-nodetype/java"/>
- <classpathentry kind="src" path="src/jar/resolver-prefix/java"/>
- <classpathentry kind="src" path="src/jar/resolver-relational/java"/>
- <classpathentry kind="src" path="src/jar/resolver-spi/java"/>
- <classpathentry kind="src" path="src/jar/resolver-store/java"/>
- <classpathentry kind="src" path="src/jar/resolver-test/java"/>
- <classpathentry kind="src" path="src/jar/resolver-url/java"/>
- <classpathentry kind="src" path="src/jar/resolver-view/java"/>
- <classpathentry kind="src" path="src/jar/resolver-xsd/java"/>
- <classpathentry kind="src" path="src/jar/rules/java"/>
- <classpathentry kind="src" path="src/jar/server/java"/>
- <classpathentry kind="src" path="src/jar/server-beep/java"/>
- <classpathentry kind="src" path="src/jar/server-http/java"/>
- <classpathentry kind="src" path="src/jar/server-local/java"/>
- <classpathentry kind="src" path="src/jar/server-rmi/java"/>
- <classpathentry kind="src" path="src/jar/sofa/java"/>
- <classpathentry kind="src" path="src/jar/sparql-protocol/java"/>
- <classpathentry kind="src" path="src/jar/store/java"/>
- <classpathentry kind="src" path="src/jar/store-nodepool/java"/>
- <classpathentry kind="src" path="src/jar/store-nodepool-memory/java"/>
- <classpathentry kind="src" path="src/jar/store-nodepool-xa/java"/>
- <classpathentry kind="src" path="src/jar/store-stringpool/java"/>
- <classpathentry kind="src" path="src/jar/store-stringpool-memory/java"/>
- <classpathentry kind="src" path="src/jar/store-stringpool-xa/java"/>
- <classpathentry kind="src" path="src/jar/store-xa/java"/>
- <classpathentry kind="src" path="src/jar/tag/java"/>
- <classpathentry kind="src" path="src/jar/tuples/java"/>
- <classpathentry kind="src" path="src/jar/tuples-hybrid/java"/>
- <classpathentry kind="src" path="src/jar/util/java"/>
- <classpathentry kind="src" path="src/jar/util-xa/java"/>
- <classpathentry kind="src" path="src/jar/parser/java"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="lib" path="lib/xom-1.0d21.jar"/>
- <classpathentry kind="lib" path="lib/xmlParserAPIs.jar"/>
- <classpathentry kind="lib" path="lib/xmlc-xerces.jar"/>
- <classpathentry kind="lib" path="lib/xmlc-taskdef-2.2.jar"/>
- <classpathentry kind="lib" path="lib/xmlc-all-runtime-2.2.jar"/>
- <classpathentry kind="lib" path="lib/xercesImpl.jar"/>
- <classpathentry kind="lib" path="lib/wsdl4j-1.5.1.jar"/>
- <classpathentry kind="lib" path="lib/trove-1.0.2.jar"/>
- <classpathentry kind="lib" path="lib/sofa-1.0-alpha.jar"/>
- <classpathentry kind="lib" path="lib/sablecc-2.18.2.jar"/>
- <classpathentry kind="lib" path="lib/saaj-1.4.jar"/>
- <classpathentry kind="lib" path="lib/Quick4util.jar"/>
- <classpathentry kind="lib" path="lib/Quick4rt.jar"/>
- <classpathentry kind="lib" path="lib/plankton-1.2.6.jar"/>
- <classpathentry kind="lib" path="lib/org.mortbay.jetty-4.2.19.jar"/>
- <classpathentry kind="lib" path="lib/org.mortbay.jetty.plus-4.2.19.jar"/>
- <classpathentry kind="lib" path="lib/mail-1.3.jar"/>
- <classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
- <classpathentry kind="lib" path="lib/jxunit3.jar"/>
- <classpathentry kind="lib" path="lib/junit-3.8.1.jar"/>
- <classpathentry kind="lib" path="lib/jtidy-r7-xmlc-2.2.jar"/>
- <classpathentry kind="lib" path="lib/jta-spec1_0_1.jar"/>
- <classpathentry kind="lib" path="lib/jsr173_07_ri.jar"/>
- <classpathentry kind="lib" path="lib/jsr173_07_api.jar"/>
- <classpathentry kind="lib" path="lib/js-1.5r3.jar"/>
- <classpathentry kind="lib" path="lib/jotm-2.0.10.jar"/>
- <classpathentry kind="lib" path="lib/jotm_jrmp_stubs-2.0.10.jar"/>
- <classpathentry kind="lib" path="lib/carol-2.0.5.jar"/>
- <classpathentry kind="lib" path="lib/howl-logger-0.1.11.jar"/>
- <classpathentry kind="lib" path="lib/jl1.0.jar"/>
- <classpathentry kind="lib" path="lib/jid3-0.34.jar"/>
- <classpathentry kind="lib" path="lib/jboss-j2ee.jar"/>
- <classpathentry kind="lib" path="lib/jaxrpc-1.4.jar"/>
- <classpathentry kind="lib" path="lib/javax.servlet-2.3.jar"/>
- <classpathentry kind="lib" path="lib/javacc.jar"/>
- <classpathentry kind="lib" path="lib/jasper-runtime-4.2.29.jar"/>
- <classpathentry kind="lib" path="lib/jasper-compiler-4.2.29.jar"/>
- <classpathentry kind="lib" path="lib/jargs-0.2.jar"/>
- <classpathentry kind="lib" path="lib/jakarta-oro-2.0.5.jar"/>
- <classpathentry kind="lib" path="lib/icu4j.jar"/>
- <classpathentry kind="lib" path="lib/gnu-regexp-1.1.4.jar"/>
- <classpathentry kind="lib" path="lib/emory-util.jar"/>
- <classpathentry kind="lib" path="lib/connector-1_5.jar"/>
- <classpathentry kind="lib" path="lib/concurrent-1.3.4.jar"/>
- <classpathentry kind="lib" path="lib/commons-logging-1.0.3.jar"/>
- <classpathentry kind="lib" path="lib/commons-discovery-1.2.jar"/>
- <classpathentry kind="lib" path="lib/castor-0.9.3.9-xml.jar"/>
- <classpathentry kind="lib" path="lib/bsh-2.0b1.jar"/>
- <classpathentry kind="lib" path="lib/bsf-2.3.0.jar"/>
- <classpathentry kind="lib" path="lib/beepcore-0.9.08.jar"/>
- <classpathentry kind="lib" path="lib/barracuda-ant-1.2.6.jar"/>
- <classpathentry kind="lib" path="lib/barracuda-1.2.6.jar"/>
- <classpathentry kind="lib" path="lib/axis-ant-1.4.jar"/>
- <classpathentry kind="lib" path="lib/axis-1.4.jar"/>
- <classpathentry kind="lib" path="lib/aspectjrt-1.2.jar"/>
- <classpathentry kind="lib" path="lib/apache-soap-2.2.jar"/>
- <classpathentry kind="lib" path="lib/antlr.jar"/>
- <classpathentry kind="lib" path="lib/activation-1.0.2.jar"/>
- <classpathentry kind="lib" path="lib/jena-2.1.jar"/>
- <classpathentry kind="lib" path="dist/ideSupport.jar"/>
- <classpathentry kind="lib" path="lib/xalan-2.7.0.jar"/>
- <classpathentry kind="lib" path="lib/lucene-2.0.0.jar"/>
- <classpathentry kind="lib" path="lib/jrdf-0.3.4.3.jar"/>
- <classpathentry kind="lib" path="lib/ant-trax-1.7.0.jar"/>
- <classpathentry kind="lib" path="lib/ant-nodeps-1.7.0.jar"/>
- <classpathentry kind="lib" path="lib/ant-launcher-1.7.0.jar"/>
- <classpathentry kind="lib" path="lib/ant-junit-1.7.0.jar"/>
- <classpathentry kind="lib" path="lib/ant-apache-bsf-1.7.0.jar"/>
- <classpathentry kind="lib" path="lib/ant-1.7.0.jar"/>
- <classpathentry kind="lib" path="lib/DateUtils1.jar"/>
- <classpathentry kind="lib" path="lib/commons-httpclient-3.0.1.jar"/>
- <classpathentry kind="lib" path="lib/commons-codec-1.3.jar"/>
- <classpathentry kind="output" path="obj/jar"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry path="src/jar/ant-task/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-distributed/java" kind="src"/>
+ <classpathentry path="src/war/webui/java" kind="src"/>
+ <classpathentry path="src/jar/descriptor/src/java" kind="src"/>
+ <classpathentry path="src/jar/client-jrdf/java" kind="src"/>
+ <classpathentry path="src/jar/content-mbox/java" kind="src"/>
+ <classpathentry path="src/jar/content-mp3/java" kind="src"/>
+ <classpathentry path="src/jar/content-n3/java" kind="src"/>
+ <classpathentry path="src/jar/content-rdfxml/java" kind="src"/>
+ <classpathentry path="src/jar/content-rio/java" kind="src"/>
+ <classpathentry path="src/jar/demo-mp3/java" kind="src"/>
+ <classpathentry path="src/jar/driver/java" kind="src"/>
+ <classpathentry path="src/jar/dtd/java" kind="src"/>
+ <classpathentry path="src/jar/itql/java" kind="src"/>
+ <classpathentry path="src/jar/itql/sablecc" kind="src"/>
+ <classpathentry path="src/jar/jrdf/java" kind="src"/>
+ <classpathentry path="src/jar/krule/java" kind="src"/>
+ <classpathentry path="src/jar/query/java" kind="src"/>
+ <classpathentry path="src/jar/resolver/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-file/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-filesystem/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-gis/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-http/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-jar/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-lucene/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-memory/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-nodetype/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-prefix/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-relational/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-spi/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-store/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-test/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-url/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-view/java" kind="src"/>
+ <classpathentry path="src/jar/resolver-xsd/java" kind="src"/>
+ <classpathentry path="src/jar/rules/java" kind="src"/>
+ <classpathentry path="src/jar/server/java" kind="src"/>
+ <classpathentry path="src/jar/server-beep/java" kind="src"/>
+ <classpathentry path="src/jar/server-http/java" kind="src"/>
+ <classpathentry path="src/jar/server-local/java" kind="src"/>
+ <classpathentry path="src/jar/server-rmi/java" kind="src"/>
+ <classpathentry path="src/jar/sofa/java" kind="src"/>
+ <classpathentry path="src/jar/sparql-protocol/java" kind="src"/>
+ <classpathentry path="src/jar/store/java" kind="src"/>
+ <classpathentry path="src/jar/store-nodepool/java" kind="src"/>
+ <classpathentry path="src/jar/store-nodepool-memory/java" kind="src"/>
+ <classpathentry path="src/jar/store-nodepool-xa/java" kind="src"/>
+ <classpathentry path="src/jar/store-stringpool/java" kind="src"/>
+ <classpathentry path="src/jar/store-stringpool-memory/java" kind="src"/>
+ <classpathentry path="src/jar/store-stringpool-xa/java" kind="src"/>
+ <classpathentry path="src/jar/store-xa/java" kind="src"/>
+ <classpathentry path="src/jar/tag/java" kind="src"/>
+ <classpathentry path="src/jar/tuples/java" kind="src"/>
+ <classpathentry path="src/jar/tuples-hybrid/java" kind="src"/>
+ <classpathentry path="src/jar/util/java" kind="src"/>
+ <classpathentry path="src/jar/util-xa/java" kind="src"/>
+ <classpathentry path="src/jar/parser/java" kind="src"/>
+ <classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"/>
+ <classpathentry path="lib/xom-1.0d21.jar" kind="lib"/>
+ <classpathentry path="lib/xmlParserAPIs.jar" kind="lib"/>
+ <classpathentry path="lib/xmlc-xerces.jar" kind="lib"/>
+ <classpathentry path="lib/xmlc-taskdef-2.2.jar" kind="lib"/>
+ <classpathentry path="lib/xmlc-all-runtime-2.2.jar" kind="lib"/>
+ <classpathentry path="lib/xercesImpl.jar" kind="lib"/>
+ <classpathentry path="lib/wsdl4j-1.5.1.jar" kind="lib"/>
+ <classpathentry path="lib/trove-1.0.2.jar" kind="lib"/>
+ <classpathentry path="lib/sofa-1.0-alpha.jar" kind="lib"/>
+ <classpathentry path="lib/sablecc-2.18.2.jar" kind="lib"/>
+ <classpathentry path="lib/saaj-1.4.jar" kind="lib"/>
+ <classpathentry path="lib/Quick4util.jar" kind="lib"/>
+ <classpathentry path="lib/Quick4rt.jar" kind="lib"/>
+ <classpathentry path="lib/plankton-1.2.6.jar" kind="lib"/>
+ <classpathentry path="lib/org.mortbay.jetty-4.2.19.jar" kind="lib"/>
+ <classpathentry path="lib/org.mortbay.jetty.plus-4.2.19.jar" kind="lib"/>
+ <classpathentry path="lib/mail-1.3.jar" kind="lib"/>
+ <classpathentry path="lib/log4j-1.2.15.jar" kind="lib"/>
+ <classpathentry path="lib/jxunit3.jar" kind="lib"/>
+ <classpathentry path="lib/junit-3.8.1.jar" kind="lib"/>
+ <classpathentry path="lib/jtidy-r7-xmlc-2.2.jar" kind="lib"/>
+ <classpathentry path="lib/jta-spec1_0_1.jar" kind="lib"/>
+ <classpathentry path="lib/jsr173_07_ri.jar" kind="lib"/>
+ <classpathentry path="lib/jsr173_07_api.jar" kind="lib"/>
+ <classpathentry path="lib/js-1.5r3.jar" kind="lib"/>
+ <classpathentry path="lib/jotm-2.0.10.jar" kind="lib"/>
+ <classpathentry path="lib/jotm_jrmp_stubs-2.0.10.jar" kind="lib"/>
+ <classpathentry path="lib/carol-2.0.5.jar" kind="lib"/>
+ <classpathentry path="lib/howl-logger-0.1.11.jar" kind="lib"/>
+ <classpathentry path="lib/jl1.0.jar" kind="lib"/>
+ <classpathentry path="lib/jid3-0.34.jar" kind="lib"/>
+ <classpathentry path="lib/jboss-j2ee.jar" kind="lib"/>
+ <classpathentry path="lib/jaxrpc-1.4.jar" kind="lib"/>
+ <classpathentry path="lib/javax.servlet-2.3.jar" kind="lib"/>
+ <classpathentry path="lib/javacc.jar" kind="lib"/>
+ <classpathentry path="lib/jasper-runtime-4.2.29.jar" kind="lib"/>
+ <classpathentry path="lib/jasper-compiler-4.2.29.jar" kind="lib"/>
+ <classpathentry path="lib/jargs-0.2.jar" kind="lib"/>
+ <classpathentry path="lib/jakarta-oro-2.0.5.jar" kind="lib"/>
+ <classpathentry path="lib/icu4j.jar" kind="lib"/>
+ <classpathentry path="lib/gnu-regexp-1.1.4.jar" kind="lib"/>
+ <classpathentry path="lib/connector-1_5.jar" kind="lib"/>
+ <classpathentry path="lib/concurrent-1.3.4.jar" kind="lib"/>
+ <classpathentry path="lib/commons-logging-1.0.3.jar" kind="lib"/>
+ <classpathentry path="lib/commons-discovery-1.2.jar" kind="lib"/>
+ <classpathentry path="lib/bsh-2.0b1.jar" kind="lib"/>
+ <classpathentry path="lib/bsf-2.3.0.jar" kind="lib"/>
+ <classpathentry path="lib/beepcore-0.9.08.jar" kind="lib"/>
+ <classpathentry path="lib/barracuda-ant-1.2.6.jar" kind="lib"/>
+ <classpathentry path="lib/barracuda-1.2.6.jar" kind="lib"/>
+ <classpathentry path="lib/axis-ant-1.4.jar" kind="lib"/>
+ <classpathentry path="lib/axis-1.4.jar" kind="lib"/>
+ <classpathentry path="lib/aspectjrt-1.2.jar" kind="lib"/>
+ <classpathentry path="lib/apache-soap-2.2.jar" kind="lib"/>
+ <classpathentry path="lib/antlr.jar" kind="lib"/>
+ <classpathentry path="lib/activation-1.0.2.jar" kind="lib"/>
+ <classpathentry path="lib/jena-2.1.jar" kind="lib"/>
+ <classpathentry path="dist/ideSupport.jar" kind="lib"/>
+ <classpathentry path="lib/xalan-2.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/lucene-2.0.0.jar" kind="lib"/>
+ <classpathentry path="lib/jrdf-0.3.4.3.jar" kind="lib"/>
+ <classpathentry path="lib/ant-trax-1.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/ant-nodeps-1.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/ant-launcher-1.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/ant-junit-1.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/ant-apache-bsf-1.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/ant-1.7.0.jar" kind="lib"/>
+ <classpathentry path="lib/DateUtils1.jar" kind="lib"/>
+ <classpathentry path="lib/commons-httpclient-3.0.1.jar" kind="lib"/>
+ <classpathentry path="lib/commons-codec-1.3.jar" kind="lib"/>
+ <classpathentry path="lib/castor-1.2-codegen.jar" kind="lib"/>
+ <classpathentry path="lib/castor-1.2-xml.jar" kind="lib"/>
+ <classpathentry path="lib/castor-1.2-xml-schema.jar" kind="lib"/>
+ <classpathentry path="lib/derby.jar" kind="lib"/>
+ <classpathentry path="lib/velocity-1.5.jar" kind="lib"/>
+ <classpathentry path="lib/emory-util-2.1-remote.jar" kind="lib"/>
+ <classpathentry path="obj/jar" kind="output"/>
+</classpath>
Modified: trunk/src/jar/util/java/org/mulgara/util/MappedIntFile.java
===================================================================
--- trunk/src/jar/util/java/org/mulgara/util/MappedIntFile.java 2008-04-16 09:58:01 UTC (rev 793)
+++ trunk/src/jar/util/java/org/mulgara/util/MappedIntFile.java 2008-04-16 19:55:04 UTC (rev 794)
@@ -28,13 +28,20 @@
package org.mulgara.util;
// Java 2 standard packages
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
-// Third party packages
import org.apache.log4j.Logger;
+import sun.misc.Cleaner;
+
/**
* @created 2003-01-09
*
@@ -299,6 +306,11 @@
*/
public synchronized void unmap() {
// Discard the file mappings.
+ if (mappedByteBuffers != null) {
+ for (MappedByteBuffer buffer : mappedByteBuffers) {
+ clean(buffer);
+ }
+ }
mappedByteBuffers = null;
intBuffers = null;
longBuffers = null;
@@ -379,5 +391,23 @@
nrMappedRegions = nrRegions;
}
+
+ private static void clean(final Object buffer) {
+ if (buffer != null) {
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
+ public Object run() {
+ try {
+ Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]);
+ getCleanerMethod.setAccessible(true);
+ Cleaner cleaner = (Cleaner)getCleanerMethod.invoke(buffer, new Object[0]);
+ cleaner.clean();
+ } catch (Exception e) {
+ logger.warn("Error cleaning buffer", e);
+ }
+ return null;
+ }
+ });
+ }
+ }
}
Modified: trunk/src/jar/util-xa/java/org/mulgara/store/xa/MappedBlockFile.java
===================================================================
--- trunk/src/jar/util-xa/java/org/mulgara/store/xa/MappedBlockFile.java 2008-04-16 09:58:01 UTC (rev 793)
+++ trunk/src/jar/util-xa/java/org/mulgara/store/xa/MappedBlockFile.java 2008-04-16 19:55:04 UTC (rev 794)
@@ -29,12 +29,17 @@
// Java 2 standard packages
import java.io.*;
+import java.lang.reflect.Method;
import java.nio.*;
import java.nio.channels.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
// Third party packages
import org.apache.log4j.Logger;
+import sun.misc.Cleaner;
+
/**
* An implementation of BlockFile which uses memory mapped file IO.
* Rather than mapping the entire file in one go, it gets mapped into
@@ -334,6 +339,12 @@
*/
public synchronized void unmap() {
// Discard the file mappings.
+ if (mappedByteBuffers != null) {
+ for (MappedByteBuffer buffer : mappedByteBuffers) {
+ clean(buffer);
+ }
+ }
+
mappedByteBuffers = null;
srcByteBuffers = null;
intBuffers = null;
@@ -461,5 +472,23 @@
nrMappedRegions = nrRegions;
}
+
+ private static void clean(final Object buffer) {
+ if (buffer != null) {
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
+ public Object run() {
+ try {
+ Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]);
+ getCleanerMethod.setAccessible(true);
+ Cleaner cleaner = (Cleaner)getCleanerMethod.invoke(buffer, new Object[0]);
+ cleaner.clean();
+ } catch (Exception e) {
+ logger.warn("Error cleaning buffer", e);
+ }
+ return null;
+ }
+ });
+ }
+ }
}
More information about the Mulgara-svn
mailing list