Author: lehmi
Date: Mon Oct 13 06:07:21 2025
New Revision: 1929105

Log:
PDFBOX-5660: skip close operations for already closed resources as proposed by 
Valery Bokov, closes #287

Modified:
   
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java
   
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java
   
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java

Modified: 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java
==============================================================================
--- 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java  
    Mon Oct 13 06:03:19 2025        (r1929104)
+++ 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java  
    Mon Oct 13 06:07:21 2025        (r1929105)
@@ -150,10 +150,13 @@ public class RandomAccessReadBuffer impl
     @Override
     public void close() throws IOException
     {
-        rarbCopies.values().forEach(IOUtils::closeQuietly);
-        rarbCopies.clear();
-        currentBuffer = null;
-        bufferList.clear();
+        if (!isClosed())
+        {
+            rarbCopies.values().forEach(IOUtils::closeQuietly);
+            rarbCopies.clear();
+            currentBuffer = null;
+            bufferList.clear();
+        }
     }
 
     /**

Modified: 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java
==============================================================================
--- 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java
        Mon Oct 13 06:03:19 2025        (r1929104)
+++ 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java
        Mon Oct 13 06:07:21 2025        (r1929105)
@@ -242,11 +242,14 @@ public class RandomAccessReadBufferedFil
     @Override
     public void close() throws IOException
     {
-        rafCopies.values().forEach(IOUtils::closeQuietly);
-        rafCopies.clear();
-        fileChannel.close();
-        pageCache.clear();
-        isClosed = true;
+        if (!isClosed())
+        {
+            rafCopies.values().forEach(IOUtils::closeQuietly);
+            rafCopies.clear();
+            fileChannel.close();
+            pageCache.clear();
+            isClosed = true;
+        }
     }
 
     @Override

Modified: 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
==============================================================================
--- 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
    Mon Oct 13 06:03:19 2025        (r1929104)
+++ 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
    Mon Oct 13 06:07:21 2025        (r1929105)
@@ -107,6 +107,10 @@ public class RandomAccessReadMemoryMappe
     @Override
     public void close() throws IOException
     {
+        if (isClosed())
+        {
+            return;
+        }
         if (fileChannel != null)
         {
             fileChannel.close();

Reply via email to