diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt index 5932b068773..c056584722c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt @@ -153,8 +153,9 @@ internal val Project.cleanNativeDistributionCommonizerTask: TaskProvider + val files = commonizerDirectory.get().listFiles().orEmpty().toSet() - lockFile + delete(*files.toTypedArray()) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionCommonizerLock.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionCommonizerLock.kt index 7097a62d862..8eed0c00e29 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionCommonizerLock.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/NativeDistributionCommonizerLock.kt @@ -19,29 +19,29 @@ internal class NativeDistributionCommonizerLock( val lockedOutputDirectories = hashSetOf() } - fun withLock(action: () -> T): T { + fun withLock(action: (lockFile: File) -> T): T { /* Enter intra-process wide lock */ intraProcessLock.withLock { + val lockFile = outputDirectory.resolve(".lock") if (outputDirectory in lockedOutputDirectories) { /* Already acquired this directory and re-entered: We can just execute the action */ - return action() + return action(lockFile) } /* Lock output directory inter-process wide */ outputDirectory.mkdirs() - val lockfile = outputDirectory.resolve(".lock") - logInfo("Acquire lock: ${lockfile.path} ...") + logInfo("Acquire lock: ${lockFile.path} ...") FileOutputStream(outputDirectory.resolve(".lock")).use { stream -> val lock = stream.channel.lock() assert(lock.isValid) return try { - logInfo("Lock acquired: ${lockfile.path}") + logInfo("Lock acquired: ${lockFile.path}") lockedOutputDirectories.add(outputDirectory) - action() + action(lockFile) } finally { lockedOutputDirectories.remove(outputDirectory) lock.release() - logInfo("Lock released: ${lockfile.path}") + logInfo("Lock released: ${lockFile.path}") } } }