You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2010/09/21 07:04:19 UTC
svn commit: r999223 - in /lucene/dev/trunk/lucene: CHANGES.txt
src/java/org/apache/lucene/store/MMapDirectory.java
Author: rmuir
Date: Tue Sep 21 05:04:19 2010
New Revision: 999223
URL: http://svn.apache.org/viewvc?rev=999223&view=rev
Log:
LUCENE-2650: Added extra safety to MMapIndexInput clones
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/src/java/org/apache/lucene/store/MMapDirectory.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=999223&r1=999222&r2=999223&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Sep 21 05:04:19 2010
@@ -526,6 +526,9 @@ Bug fixes
* LUCENE-2634: isCurrent on an NRT reader was failing to return false
if the writer had just committed (Nikolay Zamosenchuk via Mike McCandless)
+* LUCENE-2650: Added extra safety to MMapIndexInput clones to prevent accessing
+ an unmapped buffer if the input is closed (Mike McCandless, Uwe Schindler, Robert Muir)
+
New features
* LUCENE-2128: Parallelized fetching document frequencies during weight
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/store/MMapDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/store/MMapDirectory.java?rev=999223&r1=999222&r2=999223&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/store/MMapDirectory.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/store/MMapDirectory.java Tue Sep 21 05:04:19 2010
@@ -259,6 +259,8 @@ public class MMapDirectory extends FSDir
@Override
public Object clone() {
+ if (buffer == null)
+ throw new AlreadyClosedException("MMapIndexInput already closed");
MMapIndexInput clone = (MMapIndexInput)super.clone();
clone.isClone = true;
clone.buffer = buffer.duplicate();
@@ -267,9 +269,9 @@ public class MMapDirectory extends FSDir
@Override
public void close() throws IOException {
- if (isClone || buffer == null) return;
// unmap the buffer (if enabled) and at least unset it for GC
try {
+ if (isClone || buffer == null) return;
cleanMapping(buffer);
} finally {
buffer = null;
@@ -382,6 +384,8 @@ public class MMapDirectory extends FSDir
@Override
public Object clone() {
+ if (buffers == null)
+ throw new AlreadyClosedException("MultiMMapIndexInput already closed");
MultiMMapIndexInput clone = (MultiMMapIndexInput)super.clone();
clone.isClone = true;
clone.buffers = new ByteBuffer[buffers.length];
@@ -403,8 +407,8 @@ public class MMapDirectory extends FSDir
@Override
public void close() throws IOException {
- if (isClone || buffers == null) return;
try {
+ if (isClone || buffers == null) return;
for (int bufNr = 0; bufNr < buffers.length; bufNr++) {
// unmap the buffer (if enabled) and at least unset it for GC
try {