diff --git a/src/clang_complete.cc b/src/clang_complete.cc index 04a6a1b5..615502fa 100644 --- a/src/clang_complete.cc +++ b/src/clang_complete.cc @@ -463,11 +463,13 @@ ClangCompleteManager::ClangCompleteManager(Config* config, Project* project, Wor new std::thread([&]() { SetCurrentThreadName("completequery"); CompletionQueryMain(this); + std::cerr << "!!! exiting completequery thread" << std::endl; }); new std::thread([&]() { SetCurrentThreadName("completeparse"); CompletionParseMain(this); + std::cerr << "!!! exiting completeparse thread" << std::endl; }); } diff --git a/src/command_line.cc b/src/command_line.cc index 8196a962..71e21f22 100644 --- a/src/command_line.cc +++ b/src/command_line.cc @@ -1598,7 +1598,8 @@ bool QueryDbMainLoop( } case IpcId::TextDocumentCompletion: { - auto msg = static_cast(message.get()); + auto msg = std::shared_ptr( + static_cast(message.release())); std::string path = msg->params.textDocument.uri.GetPath(); WorkingFile* file = working_files->GetFileByFilename(path); @@ -1648,7 +1649,7 @@ bool QueryDbMainLoop( ClangCompleteManager::OnComplete callback = std::bind( [working_files, global_code_complete_cache, non_global_code_complete_cache, is_global_completion, existing_completion] - (Ipc_TextDocumentComplete* msg, NonElidedVector results) { + (std::shared_ptr msg, NonElidedVector results) { Out_TextDocumentComplete complete_response; complete_response.id = msg->id; @@ -1672,9 +1673,7 @@ bool QueryDbMainLoop( std::cerr << "[complete] Updating non_global_code_complete_cache->cached_results [1]" << std::endl; non_global_code_complete_cache->cached_results = results; } - - delete msg; - }, static_cast(message.release()), std::placeholders::_1); + }, msg, std::placeholders::_1); if (is_global_completion && global_code_complete_cache->cached_path == path && !global_code_complete_cache->cached_results.empty()) { std::cerr << "[complete] Early-returning cached global completion results at " << msg->params.position.ToString() << std::endl; @@ -1688,12 +1687,8 @@ bool QueryDbMainLoop( global_code_complete_cache->cached_results = results; }; - // Note: |callback| will delete the message (ie, |params|) so we - // need to run completion_manager->CodeComplete before |callback|. - lsTextDocumentPositionParams params = msg->params; callback(global_code_complete_cache->cached_results); - - clang_complete->CodeComplete(params, std::move(freshen_global)); + clang_complete->CodeComplete(msg->params, std::move(freshen_global)); } else if (non_global_code_complete_cache->IsCacheValid(msg->params)) { std::cerr << "[complete] Using cached completion results at " << msg->params.position.ToString() << std::endl;