https://github.com/ayushpareek2003 created 
https://github.com/llvm/llvm-project/pull/132640

At line 754, added a FOR loop for retrying until we get a unique path

>From 3927b90a26ea1bd04fe7e55a6d21e7d27ce68839 Mon Sep 17 00:00:00 2001
From: Ayush Pareek <ayushpareek1...@gmail.com>
Date: Mon, 24 Mar 2025 03:45:31 +0530
Subject: [PATCH] Retry for Unique Path Creation

At line 754, added a FOR loop for retrying until we get a unique path
---
 .../DependencyScanningWorker.cpp              | 22 ++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp 
b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
index ca15a088c308d..5527275575b26 100644
--- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
+++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
@@ -750,9 +750,25 @@ bool DependencyScanningWorker::computeDependencies(
   auto InMemoryFS = llvm::makeIntrusiveRefCnt<llvm::vfs::InMemoryFileSystem>();
   InMemoryFS->setCurrentWorkingDirectory(WorkingDirectory);
   SmallString<128> FakeInputPath;
-  // TODO: We should retry the creation if the path already exists.
-  llvm::sys::fs::createUniquePath(ModuleName + "-%%%%%%%%.input", 
FakeInputPath,
-                                  /*MakeAbsolute=*/false);
+  
+  unsigned RetryCount = 5; // retries to create 
+  bool UniquePathCreated = false;
+
+  for (unsigned i = 0; i < RetryCount; ++i) {
+    if (llvm::sys::fs::createUniquePath(ModuleName + "-%%%%%%%%.input", 
FakeInputPath,
+                                        /*MakeAbsolute=*/false)) {
+      if (!llvm::sys::fs::exists(FakeInputPath)) {
+        UniquePathCreated = true;
+        break; // Successfully created a unique path
+      }
+    }
+  }
+  if (!UniquePathCreated) {
+    llvm::errs() << "Error: Failed to create a unique input path after " 
+                 << RetryCount << " retries.\n";
+    return false; // Handle failure appropriately
+  }
+  
   InMemoryFS->addFile(FakeInputPath, 0, llvm::MemoryBuffer::getMemBuffer(""));
   llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> InMemoryOverlay = InMemoryFS;
 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to