diff options
author | Anna Koskinen <Ansku@users.noreply.github.com> | 2021-07-22 13:01:10 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-22 13:01:10 +0300 |
commit | df8bd7e0f6d2ee4dd102e02b480d82385961a130 (patch) | |
tree | 0ed636c45e95c3334f7fd984b4e34ec26eb1d78d /server/src/main/java/com/vaadin | |
parent | 40e35575c8268868b38f725e3da43017e8992e87 (diff) | |
download | vaadin-framework-df8bd7e0f6d2ee4dd102e02b480d82385961a130.tar.gz vaadin-framework-df8bd7e0f6d2ee4dd102e02b480d82385961a130.zip |
fix: Reuse existing filesystem (#12346)
Modified cherry-pick of https://github.com/vaadin/flow/pull/11428
Diffstat (limited to 'server/src/main/java/com/vaadin')
-rw-r--r-- | server/src/main/java/com/vaadin/server/VaadinServlet.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/server/src/main/java/com/vaadin/server/VaadinServlet.java b/server/src/main/java/com/vaadin/server/VaadinServlet.java index f0ec0427bf..ce69d9204c 100644 --- a/server/src/main/java/com/vaadin/server/VaadinServlet.java +++ b/server/src/main/java/com/vaadin/server/VaadinServlet.java @@ -39,6 +39,7 @@ import java.net.URLDecoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystem; +import java.nio.file.FileSystemAlreadyExistsException; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; @@ -1382,13 +1383,25 @@ public class VaadinServlet extends HttpServlet implements Constants { return FileSystems.getFileSystem(resourceURI); } // Opened filesystem is for the file to get the correct provider - FileSystem fileSystem = FileSystems.newFileSystem(resourceURI, - Collections.emptyMap()); + FileSystem fileSystem = getNewOrExistingFileSystem(resourceURI); OPEN_FILE_SYSTEMS.put(fileURI, 1); return fileSystem; } } + private FileSystem getNewOrExistingFileSystem(URI resourceURI) + throws IOException { + try { + return FileSystems.newFileSystem(resourceURI, + Collections.emptyMap()); + } catch (FileSystemAlreadyExistsException fsaee) { + getLogger().log(Level.FINER, + "Tried to get new filesystem, but it already existed for target uri.", + fsaee); + return FileSystems.getFileSystem(resourceURI); + } + } + // Package protected for feature verification purpose void closeFileSystem(URI resourceURI) { synchronized (FILE_SYSTEM_LOCK) { |