diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-02-15 16:44:11 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-02-15 16:44:11 +0000 |
| commit | e14bd4246d4a0e557ba988f5466663b01f08820a (patch) | |
| tree | d128a38ccc69037c2f8b554197c2aa527227b821 /clang-tools-extra | |
| parent | 3858b7d6e90bd3e168453aa3633e88eaaf98a9fc (diff) | |
| download | bcm5719-llvm-e14bd4246d4a0e557ba988f5466663b01f08820a.tar.gz bcm5719-llvm-e14bd4246d4a0e557ba988f5466663b01f08820a.zip | |
[clangd] Synchronize logs access.
I don't think that this is necessary for correctness, but makes tsan
much more useful.
llvm-svn: 295194
Diffstat (limited to 'clang-tools-extra')
| -rw-r--r-- | clang-tools-extra/clangd/ASTManager.cpp | 2 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/ClangDMain.cpp | 5 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/JSONRPCDispatcher.cpp | 10 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/JSONRPCDispatcher.h | 4 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/ProtocolHandlers.cpp | 8 |
5 files changed, 17 insertions, 12 deletions
diff --git a/clang-tools-extra/clangd/ASTManager.cpp b/clang-tools-extra/clangd/ASTManager.cpp index e81dda78546..397b8bc74b8 100644 --- a/clang-tools-extra/clangd/ASTManager.cpp +++ b/clang-tools-extra/clangd/ASTManager.cpp @@ -150,7 +150,7 @@ ASTManager::getOrCreateCompilationDatabaseForFile(StringRef Uri) { std::string Error; I = tooling::CompilationDatabase::autoDetectFromSource(Uri, Error); - Output.logs() << "Failed to load compilation database: " << Error << '\n'; + Output.log("Failed to load compilation database: " + Twine(Error) + "\n"); return I.get(); } diff --git a/clang-tools-extra/clangd/ClangDMain.cpp b/clang-tools-extra/clangd/ClangDMain.cpp index 9a698c15434..ca083653a39 100644 --- a/clang-tools-extra/clangd/ClangDMain.cpp +++ b/clang-tools-extra/clangd/ClangDMain.cpp @@ -88,12 +88,11 @@ int main(int argc, char *argv[]) { if (Len > 0) { llvm::StringRef JSONRef(JSON.data(), Len); // Log the message. - Logs << "<-- " << JSONRef << '\n'; - Logs.flush(); + Out.log("<-- " + JSONRef + "\n"); // Finally, execute the action for this JSON message. if (!Dispatcher.call(JSONRef)) - Logs << "JSON dispatch failed!\n"; + Out.log("JSON dispatch failed!\n"); // If we're done, exit the loop. if (ShutdownHandler->isDone()) diff --git a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp index fd0b394ab39..f3045fbc33d 100644 --- a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp +++ b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp @@ -29,8 +29,14 @@ void JSONOutput::writeMessage(const Twine &Message) { Outs.flush(); } +void JSONOutput::log(const Twine &Message) { + std::lock_guard<std::mutex> Guard(StreamMutex); + Logs << Message; + Logs.flush(); +} + void Handler::handleMethod(llvm::yaml::MappingNode *Params, StringRef ID) { - Output.logs() << "Method ignored.\n"; + Output.log("Method ignored.\n"); // Return that this method is unsupported. writeMessage( R"({"jsonrpc":"2.0","id":)" + ID + @@ -38,7 +44,7 @@ void Handler::handleMethod(llvm::yaml::MappingNode *Params, StringRef ID) { } void Handler::handleNotification(llvm::yaml::MappingNode *Params) { - Output.logs() << "Notification ignored.\n"; + Output.log("Notification ignored.\n"); } void JSONRPCDispatcher::registerHandler(StringRef Method, diff --git a/clang-tools-extra/clangd/JSONRPCDispatcher.h b/clang-tools-extra/clangd/JSONRPCDispatcher.h index 60f81031e62..7040d2d0071 100644 --- a/clang-tools-extra/clangd/JSONRPCDispatcher.h +++ b/clang-tools-extra/clangd/JSONRPCDispatcher.h @@ -28,8 +28,8 @@ public: /// Emit a JSONRPC message. void writeMessage(const Twine &Message); - /// Get the logging stream. - llvm::raw_ostream &logs() { return Logs; } + /// Write to the logging stream. + void log(const Twine &Message); private: llvm::raw_ostream &Outs; diff --git a/clang-tools-extra/clangd/ProtocolHandlers.cpp b/clang-tools-extra/clangd/ProtocolHandlers.cpp index 7d321a2f025..661bc010bc8 100644 --- a/clang-tools-extra/clangd/ProtocolHandlers.cpp +++ b/clang-tools-extra/clangd/ProtocolHandlers.cpp @@ -17,7 +17,7 @@ void TextDocumentDidOpenHandler::handleNotification( llvm::yaml::MappingNode *Params) { auto DOTDP = DidOpenTextDocumentParams::parse(Params); if (!DOTDP) { - Output.logs() << "Failed to decode DidOpenTextDocumentParams!\n"; + Output.log("Failed to decode DidOpenTextDocumentParams!\n"); return; } Store.addDocument(DOTDP->textDocument.uri, DOTDP->textDocument.text); @@ -27,7 +27,7 @@ void TextDocumentDidChangeHandler::handleNotification( llvm::yaml::MappingNode *Params) { auto DCTDP = DidChangeTextDocumentParams::parse(Params); if (!DCTDP || DCTDP->contentChanges.size() != 1) { - Output.logs() << "Failed to decode DidChangeTextDocumentParams!\n"; + Output.log("Failed to decode DidChangeTextDocumentParams!\n"); return; } // We only support full syncing right now. @@ -91,7 +91,7 @@ void TextDocumentRangeFormattingHandler::handleMethod( llvm::yaml::MappingNode *Params, StringRef ID) { auto DRFP = DocumentRangeFormattingParams::parse(Params); if (!DRFP) { - Output.logs() << "Failed to decode DocumentRangeFormattingParams!\n"; + Output.log("Failed to decode DocumentRangeFormattingParams!\n"); return; } @@ -108,7 +108,7 @@ void TextDocumentFormattingHandler::handleMethod( llvm::yaml::MappingNode *Params, StringRef ID) { auto DFP = DocumentFormattingParams::parse(Params); if (!DFP) { - Output.logs() << "Failed to decode DocumentFormattingParams!\n"; + Output.log("Failed to decode DocumentFormattingParams!\n"); return; } |

