You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/05/02 11:59:48 UTC
[maven-indexer] 01/01: [MINDEXER-121] Prevent ChunkReadIterator leak
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch MINDEXER-121-prevent-leak
in repository https://gitbox.apache.org/repos/asf/maven-indexer.git
commit eadff600c0e5511de915decc482ca30c7bcd7d09
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Mon May 2 13:58:57 2022 +0200
[MINDEXER-121] Prevent ChunkReadIterator leak
The simplest change to not disturb any possible
current users of this.
Later this will need some rework, probably with
some breaking changes.
---
.../org/apache/maven/index/reader/IndexReader.java | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/indexer-reader/src/main/java/org/apache/maven/index/reader/IndexReader.java b/indexer-reader/src/main/java/org/apache/maven/index/reader/IndexReader.java
index d546f8a..6b34b36 100644
--- a/indexer-reader/src/main/java/org/apache/maven/index/reader/IndexReader.java
+++ b/indexer-reader/src/main/java/org/apache/maven/index/reader/IndexReader.java
@@ -269,18 +269,28 @@ public class IndexReader
private final Iterator<String> chunkNamesIterator;
- private Resource currentResource;
-
private ChunkReader currentChunkReader;
private ChunkReaderIterator( final ResourceHandler resourceHandler, final Iterator<String> chunkNamesIterator )
{
this.resourceHandler = resourceHandler;
this.chunkNamesIterator = chunkNamesIterator;
+ this.currentChunkReader = null;
}
public boolean hasNext()
{
+ try
+ {
+ if ( currentChunkReader != null )
+ {
+ currentChunkReader.close();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( "IO problem while closing chunk readers", e );
+ }
return chunkNamesIterator.hasNext();
}
@@ -289,17 +299,13 @@ public class IndexReader
String chunkName = chunkNamesIterator.next();
try
{
- if ( currentChunkReader != null )
- {
- currentChunkReader.close();
- }
- currentResource = resourceHandler.locate( chunkName );
+ Resource currentResource = resourceHandler.locate( chunkName );
currentChunkReader = new ChunkReader( chunkName, currentResource.read() );
return currentChunkReader;
}
catch ( IOException e )
{
- throw new RuntimeException( "IO problem while switching chunk readers", e );
+ throw new RuntimeException( "IO problem while opening chunk readers", e );
}
}