[K/N lib] Add timeout for native dependency extraction
This commit is contained in:
committed by
Mikhail Glukhikh
parent
db29d12c60
commit
d49ff1aa2c
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.konan.util
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.konan.file.unzipTo
|
import org.jetbrains.kotlin.konan.file.unzipTo
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
internal class DependencyExtractor {
|
internal class DependencyExtractor {
|
||||||
private val useZip = System.getProperty("os.name").startsWith("Windows")
|
private val useZip = System.getProperty("os.name").startsWith("Windows")
|
||||||
@@ -21,10 +22,22 @@ internal class DependencyExtractor {
|
|||||||
val tarProcess = ProcessBuilder().apply {
|
val tarProcess = ProcessBuilder().apply {
|
||||||
command("tar", "-xzf", tarGz.canonicalPath)
|
command("tar", "-xzf", tarGz.canonicalPath)
|
||||||
directory(targetDirectory)
|
directory(targetDirectory)
|
||||||
|
inheritIO()
|
||||||
}.start()
|
}.start()
|
||||||
tarProcess.waitFor()
|
val finished = tarProcess.waitFor(extractionTimeout, extractionTimeoutUntis)
|
||||||
if (tarProcess.exitValue() != 0) {
|
when {
|
||||||
throw RuntimeException("Cannot extract archive with dependency: ${tarGz.canonicalPath}")
|
finished && tarProcess.exitValue() != 0 ->
|
||||||
|
throw RuntimeException(
|
||||||
|
"Cannot extract archive with dependency: ${tarGz.canonicalPath}.\n" +
|
||||||
|
"Tar exit code: ${tarProcess.exitValue()}."
|
||||||
|
)
|
||||||
|
!finished -> {
|
||||||
|
tarProcess.destroy()
|
||||||
|
throw RuntimeException(
|
||||||
|
"Cannot extract archive with dependency: ${tarGz.canonicalPath}.\n" +
|
||||||
|
"Tar process hasn't finished in ${extractionTimeoutUntis.toSeconds(extractionTimeout)} sec."
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,4 +48,9 @@ internal class DependencyExtractor {
|
|||||||
extractTarGz(archive, targetDirectory)
|
extractTarGz(archive, targetDirectory)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val extractionTimeout = 3600L
|
||||||
|
val extractionTimeoutUntis = TimeUnit.SECONDS
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user