Native: delete konan_temp right after the compilation instead of on exit

The Kotlin/Native compiler uses `.deleteOnExit()` as a substitute for
"delete after the compilation". But when the compiler runs in a Gradle
daemon, `.deleteOnExit()` means "delete on Gradle daemon exit", which
might be not soon. If a single Gradle daemon runs the compiler many
times, the remaining temporary files can consume quite a lot of disk
space. For example, this is the case for the Kotlin build.

Replace some of `.deleteOnExit()` calls with an explicit removal of
temporary files at the end of a compilation session.
This commit is contained in:
Svyatoslav Scherbina
2022-04-21 17:35:51 +03:00
committed by Space
parent ea8a05ec02
commit 4cf10686d6
3 changed files with 19 additions and 6 deletions
@@ -23,6 +23,13 @@ import org.jetbrains.kotlin.konan.file.*
* If pathToTemporaryDir is given and is not empty then temporary outputs will be preserved
*/
class TempFiles(outputPath: String, pathToTemporaryDir: String? = null) {
fun dispose() {
if (deleteOnExit) {
// Note: this can throw an exception if a file deletion is failed for some reason (e.g. OS is Windows and the file is in use).
dir.deleteRecursively()
}
}
private val outputName = File(outputPath).name
val deleteOnExit = pathToTemporaryDir == null || pathToTemporaryDir.isEmpty()
@@ -36,7 +43,7 @@ class TempFiles(outputPath: String, pathToTemporaryDir: String? = null) {
private val dir by lazy {
if (deleteOnExit) {
createTempDir("konan_temp").deleteOnExit()
createTempDir("konan_temp")
} else {
createDirForTemporaryFiles(pathToTemporaryDir!!)
}
@@ -55,8 +62,6 @@ class TempFiles(outputPath: String, pathToTemporaryDir: String? = null) {
* Create file named {name}{suffix} inside temporary dir
*/
fun create(prefix: String, suffix: String = ""): File =
File(dir, "$prefix$suffix").also {
if (deleteOnExit) it.deleteOnExit()
}
File(dir, "$prefix$suffix")
}