[klib] Create ZipFileSystem from a Path instead of an URI
Calling FileSystems.newFileSystem(URI, ...) throws a FileSystemAlreadyExistsException if a ZipFileSystem for this URI is already created. We still can use a single instance of ZipFileSystem by calling FileSystems.getFileSystem. In this case we use reference counting to determine when this instance can be safely closed. But we cannot count references if the same ZipFileSystem is used from different class loaders. This patch fixes this issue by creating a file system from Path instead of an URI. Contract of FileSystemProvider.newFileSystem(Path, ...) doesn't imply throwing FileSystemAlreadyExistsException. Issue #KT-37443 fixed
This commit is contained in:
committed by
Ilya Matveev
parent
bf1ad44af9
commit
03bb9138ad
@@ -2,7 +2,7 @@ package org.jetbrains.kotlin.library
|
||||
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.konan.file.file
|
||||
import org.jetbrains.kotlin.konan.file.withMutableZipFileSystem
|
||||
import org.jetbrains.kotlin.konan.file.withZipFileSystem
|
||||
import org.jetbrains.kotlin.library.impl.zippedKotlinLibraryChecks
|
||||
|
||||
const val KLIB_FILE_EXTENSION = "klib"
|
||||
@@ -23,7 +23,7 @@ fun File.unpackZippedKonanLibraryTo(newDir: File) {
|
||||
newDir.delete()
|
||||
}
|
||||
|
||||
this.withMutableZipFileSystem {
|
||||
this.withZipFileSystem {
|
||||
it.file("/").recursiveCopyTo(newDir)
|
||||
}
|
||||
check(newDir.exists) { "Could not unpack $this as $newDir." }
|
||||
|
||||
Reference in New Issue
Block a user