]> source.dussan.org Git - poi.git/commitdiff
[bug-62768] synchronize OPCPackage#close()
authorPJ Fanning <fanningpj@apache.org>
Thu, 27 Sep 2018 19:06:06 +0000 (19:06 +0000)
committerPJ Fanning <fanningpj@apache.org>
Thu, 27 Sep 2018 19:06:06 +0000 (19:06 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1842142 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java

index 5d9c7b9ae454f84b5dd7748de0c362972c7de0fb..949ec6952024553ef546a4d3ec478253152df2dd 100644 (file)
@@ -28,7 +28,6 @@ import java.io.OutputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.*;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -420,7 +419,7 @@ public abstract class OPCPackage implements RelationshipSource, Closeable {
         *             If an IO exception occur during the saving process.
         */
        @Override
-    public void close() throws IOException {
+    public synchronized void close() throws IOException {
                if (this.packageAccess == PackageAccess.READ) {
                        logger.log(POILogger.WARN, 
                                "The close() method is intended to SAVE a package. This package is open in READ ONLY mode, use the revert() method instead !");
@@ -434,27 +433,20 @@ public abstract class OPCPackage implements RelationshipSource, Closeable {
                    return;
                }
 
-               // Save the content
-               ReentrantReadWriteLock l = new ReentrantReadWriteLock();
-               try {
-                       l.writeLock().lock();
-                       if (this.originalPackagePath != null
-                                       && !this.originalPackagePath.trim().isEmpty()) {
-                               File targetFile = new File(this.originalPackagePath);
-                               if (!targetFile.exists()
-                                               || !(this.originalPackagePath
-                                                               .equalsIgnoreCase(targetFile.getAbsolutePath()))) {
-                                       // Case of a package created from scratch
-                                       save(targetFile);
-                               } else {
-                                       closeImpl();
-                               }
-                       } else if (this.output != null) {
-                               save(this.output);
-                               output.close();
+               if (this.originalPackagePath != null
+                               && !this.originalPackagePath.trim().isEmpty()) {
+                       File targetFile = new File(this.originalPackagePath);
+                       if (!targetFile.exists()
+                                       || !(this.originalPackagePath
+                                                       .equalsIgnoreCase(targetFile.getAbsolutePath()))) {
+                               // Case of a package created from scratch
+                               save(targetFile);
+                       } else {
+                               closeImpl();
                        }
-               } finally {
-                       l.writeLock().unlock();
+               } else if (this.output != null) {
+                       save(this.output);
+                       output.close();
                }
 
                // Clear