[cfe-commits] r98452 - in /cfe/trunk/tools/CIndex: CIndex.cpp CIndexCodeCompletion.cpp CIndexer.cpp CIndexer.h
Benjamin Kramer
benny.kra at googlemail.com
Sat Mar 13 13:22:49 PST 2010
Author: d0k
Date: Sat Mar 13 15:22:49 2010
New Revision: 98452
URL: http://llvm.org/viewvc/llvm-project?rev=98452&view=rev
Log:
Revert 98439. There is a bad race condition in sys::Path::makeUnique on win32.
Modified:
cfe/trunk/tools/CIndex/CIndex.cpp
cfe/trunk/tools/CIndex/CIndexCodeCompletion.cpp
cfe/trunk/tools/CIndex/CIndexer.cpp
cfe/trunk/tools/CIndex/CIndexer.h
Modified: cfe/trunk/tools/CIndex/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=98452&r1=98451&r2=98452&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndex.cpp Sat Mar 13 15:22:49 2010
@@ -29,6 +29,9 @@
#include "llvm/System/Program.h"
#include "llvm/System/Signals.h"
+// Needed to define L_TMPNAM on some systems.
+#include <cstdio>
+
using namespace clang;
using namespace clang::cxcursor;
using namespace clang::cxstring;
@@ -1052,8 +1055,8 @@
// Generate a temporary name for the AST file.
argv.push_back("-o");
- llvm::sys::Path astTmpFile(CIndexer::getTemporaryPath());
- argv.push_back(astTmpFile.c_str());
+ char astTmpFile[L_tmpnam];
+ argv.push_back(tmpnam(astTmpFile));
// Remap any unsaved files to temporary files.
std::vector<llvm::sys::Path> TemporaryFiles;
@@ -1084,7 +1087,9 @@
}
// Generate a temporary name for the diagnostics file.
- llvm::sys::Path DiagnosticsFile(CIndexer::getTemporaryPath());
+ char tmpFileResults[L_tmpnam];
+ char *tmpResultsFileName = tmpnam(tmpFileResults);
+ llvm::sys::Path DiagnosticsFile(tmpResultsFileName);
TemporaryFiles.push_back(DiagnosticsFile);
argv.push_back("-fdiagnostics-binary");
@@ -1113,7 +1118,7 @@
Diags->Report(diag::err_fe_invoking) << AllArgs << ErrMsg;
}
- ASTUnit *ATU = ASTUnit::LoadFromPCHFile(astTmpFile.str(), *Diags,
+ ASTUnit *ATU = ASTUnit::LoadFromPCHFile(astTmpFile, *Diags,
CXXIdx->getOnlyLocalDecls(),
RemappedFiles.data(),
RemappedFiles.size(),
Modified: cfe/trunk/tools/CIndex/CIndexCodeCompletion.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndexCodeCompletion.cpp?rev=98452&r1=98451&r2=98452&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndexCodeCompletion.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndexCodeCompletion.cpp Sat Mar 13 15:22:49 2010
@@ -299,11 +299,15 @@
argv.push_back(NULL);
// Generate a temporary name for the code-completion results file.
- llvm::sys::Path ResultsFile(CIndexer::getTemporaryPath());
+ char tmpFile[L_tmpnam];
+ char *tmpFileName = tmpnam(tmpFile);
+ llvm::sys::Path ResultsFile(tmpFileName);
TemporaryFiles.push_back(ResultsFile);
// Generate a temporary name for the diagnostics file.
- llvm::sys::Path DiagnosticsFile(CIndexer::getTemporaryPath());
+ char tmpFileResults[L_tmpnam];
+ char *tmpResultsFileName = tmpnam(tmpFileResults);
+ llvm::sys::Path DiagnosticsFile(tmpResultsFileName);
TemporaryFiles.push_back(DiagnosticsFile);
// Invoke 'clang'.
Modified: cfe/trunk/tools/CIndex/CIndexer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndexer.cpp?rev=98452&r1=98451&r2=98452&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndexer.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndexer.cpp Sat Mar 13 15:22:49 2010
@@ -95,7 +95,7 @@
return P.str();
}
-llvm::sys::Path CIndexer::getTemporaryPath() {
+static llvm::sys::Path GetTemporaryPath() {
// FIXME: This is lame; sys::Path should provide this function (in particular,
// it should know how to find the temporary files dir).
std::string Error;
@@ -107,7 +107,7 @@
if (!TmpDir)
TmpDir = "/tmp";
llvm::sys::Path P(TmpDir);
- P.appendComponent("CIndex");
+ P.appendComponent("remap");
if (P.makeUnique(false, &Error))
return llvm::sys::Path("");
@@ -123,7 +123,7 @@
std::vector<llvm::sys::Path> &TemporaryFiles) {
for (unsigned i = 0; i != num_unsaved_files; ++i) {
// Write the contents of this unsaved file into the temporary file.
- llvm::sys::Path SavedFile(CIndexer::getTemporaryPath());
+ llvm::sys::Path SavedFile(GetTemporaryPath());
if (SavedFile.empty())
return true;
Modified: cfe/trunk/tools/CIndex/CIndexer.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndexer.h?rev=98452&r1=98451&r2=98452&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndexer.h (original)
+++ cfe/trunk/tools/CIndex/CIndexer.h Sat Mar 13 15:22:49 2010
@@ -64,9 +64,6 @@
/// \brief Get the path of the clang resource files.
std::string getClangResourcesPath();
-
- /// \brief Get an unique temporary filename.
- static llvm::sys::Path getTemporaryPath();
};
namespace clang {
More information about the cfe-commits
mailing list