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 12:16:09 UTC

[maven-indexer] branch master updated: [MINDEXER-121] Prevent ChunkReadIterator leak (#206)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-indexer.git


The following commit(s) were added to refs/heads/master by this push:
     new b48ee7a  [MINDEXER-121] Prevent ChunkReadIterator leak (#206)
b48ee7a is described below

commit b48ee7a18d8de261d5cd61acc4ac87917b8f0436
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Mon May 2 14:16:06 2022 +0200

    [MINDEXER-121] Prevent ChunkReadIterator leak (#206)
    
    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 );
             }
         }