From 14b51ed1735490ff132aba62d77961a4646b9c5b Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 8 Jun 2020 12:49:07 +0200 Subject: [PATCH] Made use of thread pool in Directories instead of spawning threads, and replaced initialize_thread with thread_pool in language client" --- src/directories.cpp | 5 ++--- src/directories.hpp | 2 +- src/project.hpp | 2 -- src/source_language_protocol.cpp | 5 +---- src/source_language_protocol.hpp | 1 - 5 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/directories.cpp b/src/directories.cpp index 0cdc3e4..29c06a0 100644 --- a/src/directories.cpp +++ b/src/directories.cpp @@ -489,7 +489,7 @@ Directories::Directories() : Gtk::ListViewText(1) { } Directories::~Directories() { - dispatcher.disconnect(); + thread_pool.shutdown(true); } void Directories::open(const boost::filesystem::path &dir_path) { @@ -795,7 +795,7 @@ void Directories::colorize_path(boost::filesystem::path dir_path_, bool include_ if(it != directories.end() && it->second.repository) { auto repository = it->second.repository; - std::thread git_status_thread([this, dir_path, repository, include_parent_paths] { + thread_pool.push([this, dir_path, repository, include_parent_paths] { Git::Repository::Status status; try { status = repository->get_status(); @@ -868,6 +868,5 @@ void Directories::colorize_path(boost::filesystem::path dir_path_, bool include_ } while(it != directories.end()); }); }); - git_status_thread.detach(); } } diff --git a/src/directories.hpp b/src/directories.hpp index c40e0d1..a297f6f 100644 --- a/src/directories.hpp +++ b/src/directories.hpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -79,6 +78,7 @@ private: std::unordered_map directories; + Glib::ThreadPool thread_pool; Dispatcher dispatcher; Gtk::Menu menu; diff --git a/src/project.hpp b/src/project.hpp index 32a51f2..6503d1d 100644 --- a/src/project.hpp +++ b/src/project.hpp @@ -82,8 +82,6 @@ namespace Project { class LLDB : public virtual Base { public: - ~LLDB() override { dispatcher.disconnect(); } - #ifdef JUCI_ENABLE_DEBUG std::pair debug_get_run_arguments() override; Project::DebugOptions *debug_get_options() override; diff --git a/src/source_language_protocol.cpp b/src/source_language_protocol.cpp index 6121f34..c90a7a5 100644 --- a/src/source_language_protocol.cpp +++ b/src/source_language_protocol.cpp @@ -384,7 +384,7 @@ void Source::LanguageProtocolView::initialize() { update_status_state(this); set_editable(false); - initialize_thread = std::thread([this] { + thread_pool.push([this] { auto capabilities = client->initialize(this); dispatcher.post([this, capabilities] { @@ -419,9 +419,6 @@ void Source::LanguageProtocolView::close() { autocomplete_delayed_show_arguments_connection.disconnect(); update_type_coverage_connection.disconnect(); - if(initialize_thread.joinable()) - initialize_thread.join(); - if(autocomplete) { autocomplete->state = Autocomplete::State::idle; if(autocomplete->thread.joinable()) diff --git a/src/source_language_protocol.hpp b/src/source_language_protocol.hpp index 800734e..0b73579 100644 --- a/src/source_language_protocol.hpp +++ b/src/source_language_protocol.hpp @@ -182,7 +182,6 @@ namespace Source { size_t document_version = 1; - std::thread initialize_thread; Dispatcher dispatcher; Glib::ThreadPool thread_pool;