diff --git a/platform/bootstrap/src/com/intellij/platform/ide/impl/startup/multiProcess/PerProcessPathCustomizer.java b/platform/bootstrap/src/com/intellij/platform/ide/impl/startup/multiProcess/PerProcessPathCustomizer.java index 034261683cdd..0ecd8bb2c2e9 100644 --- a/platform/bootstrap/src/com/intellij/platform/ide/impl/startup/multiProcess/PerProcessPathCustomizer.java +++ b/platform/bootstrap/src/com/intellij/platform/ide/impl/startup/multiProcess/PerProcessPathCustomizer.java @@ -5,6 +5,7 @@ import com.intellij.openapi.application.PathCustomizer; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.project.impl.P3SupportInstaller; import com.intellij.openapi.util.io.NioFiles; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -15,6 +16,7 @@ import java.nio.channels.FileLock; import java.nio.file.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Set; import static com.intellij.idea.Main.customTargetDirectoryToImportConfig; import static com.intellij.idea.Main.isConfigImportNeeded; @@ -30,6 +32,12 @@ import static com.intellij.idea.Main.isConfigImportNeeded; public final class PerProcessPathCustomizer implements PathCustomizer { private static final String LOCK_FILE_NAME = "process.lock"; + private static final Set FILES_TO_KEEP = ContainerUtil.newHashSet( + LOCK_FILE_NAME, + ".pid", // Required by PerformanceWatcherImpl to report native crashes + ".appinfo" // Required by PerformanceWatcherImpl to report native crashes + ); + // Leave the folder locked until we exit. Store reference to keep CleanerFactory from releasing the file channel. @SuppressWarnings("unused") private static FileLock ourConfigLock; private static volatile boolean enabled; @@ -141,7 +149,7 @@ public final class PerProcessPathCustomizer implements PathCustomizer { private static void cleanDirectory(@NotNull Path directory) { try (DirectoryStream stream = Files.newDirectoryStream(directory)) { stream.forEach(path -> { - if (!path.getFileName().toString().equals(LOCK_FILE_NAME)) { + if (!FILES_TO_KEEP.contains(path.getFileName().toString())) { try { NioFiles.deleteRecursively(path); }