From 5e4ea68b5fb79d88c852518e0a7136b5487b8a2b Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Mon, 15 Aug 2022 12:54:29 +0100 Subject: [PATCH] Try and fix crash when releasing project configuration lock. #703 --- .../configuration/CompileConfiguration.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index 2e6386d2..6d8cade7 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -308,10 +308,23 @@ public final class CompileConfiguration { private static void releaseLock(Project project) { final Path lock = getLockFile(project); + if (!Files.exists(lock)) { + return; + } + try { - Files.deleteIfExists(lock); - } catch (IOException e) { - throw new UncheckedIOException("Failed to release project configuration lock", e); + Files.delete(lock); + } catch (IOException e1) { + try { + // If we failed to delete the lock file, moving it before trying to delete it may help. + final Path del = lock.resolveSibling(lock.getFileName() + ".del"); + Files.move(lock, del); + Files.delete(del); + } catch (IOException e2) { + var exception = new UncheckedIOException("Failed to release project configuration lock", e2); + exception.addSuppressed(e1); + throw exception; + } } }