You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/07/04 11:20:41 UTC
svn commit: r673972 - in
/lucene/java/trunk/src/java/org/apache/lucene/index: FieldsReader.java
FieldsWriter.java
Author: mikemccand
Date: Fri Jul 4 02:20:41 2008
New Revision: 673972
URL: http://svn.apache.org/viewvc?rev=673972&view=rev
Log:
LUCENE-1326: be sure to call Inflator/Deflator.end when working with zlib for compressed fields, to avoid memory leaks
Modified:
lucene/java/trunk/src/java/org/apache/lucene/index/FieldsReader.java
lucene/java/trunk/src/java/org/apache/lucene/index/FieldsWriter.java
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/FieldsReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/FieldsReader.java?rev=673972&r1=673971&r2=673972&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/FieldsReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/FieldsReader.java Fri Jul 4 02:20:41 2008
@@ -550,28 +550,31 @@
private final byte[] uncompress(final byte[] input)
throws CorruptIndexException, IOException {
- Inflater decompressor = new Inflater();
- decompressor.setInput(input);
-
// Create an expandable byte array to hold the decompressed data
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length);
- // Decompress the data
- byte[] buf = new byte[1024];
- while (!decompressor.finished()) {
- try {
- int count = decompressor.inflate(buf);
- bos.write(buf, 0, count);
- }
- catch (DataFormatException e) {
- // this will happen if the field is not compressed
- CorruptIndexException newException = new CorruptIndexException("field data are in wrong format: " + e.toString());
- newException.initCause(e);
- throw newException;
+ Inflater decompressor = new Inflater();
+
+ try {
+ decompressor.setInput(input);
+
+ // Decompress the data
+ byte[] buf = new byte[1024];
+ while (!decompressor.finished()) {
+ try {
+ int count = decompressor.inflate(buf);
+ bos.write(buf, 0, count);
+ }
+ catch (DataFormatException e) {
+ // this will happen if the field is not compressed
+ CorruptIndexException newException = new CorruptIndexException("field data are in wrong format: " + e.toString());
+ newException.initCause(e);
+ throw newException;
+ }
}
+ } finally {
+ decompressor.end();
}
-
- decompressor.end();
// Get the decompressed data
return bos.toByteArray();
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/FieldsWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/FieldsWriter.java?rev=673972&r1=673971&r2=673972&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/FieldsWriter.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/FieldsWriter.java Fri Jul 4 02:20:41 2008
@@ -225,14 +225,6 @@
private final byte[] compress (byte[] input) {
- // Create the compressor with highest level of compression
- Deflater compressor = new Deflater();
- compressor.setLevel(Deflater.BEST_COMPRESSION);
-
- // Give the compressor the data to compress
- compressor.setInput(input);
- compressor.finish();
-
/*
* Create an expandable byte array to hold the compressed data.
* You cannot use an array that's the same size as the orginal because
@@ -241,14 +233,26 @@
*/
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length);
- // Compress the data
- byte[] buf = new byte[1024];
- while (!compressor.finished()) {
- int count = compressor.deflate(buf);
- bos.write(buf, 0, count);
+ // Create the compressor with highest level of compression
+ Deflater compressor = new Deflater();
+
+ try {
+ compressor.setLevel(Deflater.BEST_COMPRESSION);
+
+ // Give the compressor the data to compress
+ compressor.setInput(input);
+ compressor.finish();
+
+ // Compress the data
+ byte[] buf = new byte[1024];
+ while (!compressor.finished()) {
+ int count = compressor.deflate(buf);
+ bos.write(buf, 0, count);
+ }
+
+ } finally {
+ compressor.end();
}
-
- compressor.end();
// Get the compressed data
return bos.toByteArray();