Browse Source

Made use of thread pool in Directories instead of spawning threads, and replaced initialize_thread with thread_pool in language client"

pipelines/235045657
eidheim 6 years ago
parent
commit
14b51ed173
  1. 5
      src/directories.cpp
  2. 2
      src/directories.hpp
  3. 2
      src/project.hpp
  4. 5
      src/source_language_protocol.cpp
  5. 1
      src/source_language_protocol.hpp

5
src/directories.cpp

@ -489,7 +489,7 @@ Directories::Directories() : Gtk::ListViewText(1) {
} }
Directories::~Directories() { Directories::~Directories() {
dispatcher.disconnect(); thread_pool.shutdown(true);
} }
void Directories::open(const boost::filesystem::path &dir_path) { 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) { if(it != directories.end() && it->second.repository) {
auto repository = 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; Git::Repository::Status status;
try { try {
status = repository->get_status(); status = repository->get_status();
@ -868,6 +868,5 @@ void Directories::colorize_path(boost::filesystem::path dir_path_, bool include_
} while(it != directories.end()); } while(it != directories.end());
}); });
}); });
git_status_thread.detach();
} }
} }

2
src/directories.hpp

@ -5,7 +5,6 @@
#include <atomic> #include <atomic>
#include <gtkmm.h> #include <gtkmm.h>
#include <string> #include <string>
#include <thread>
#include <unordered_map> #include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include <vector> #include <vector>
@ -79,6 +78,7 @@ private:
std::unordered_map<std::string, DirectoryData> directories; std::unordered_map<std::string, DirectoryData> directories;
Glib::ThreadPool thread_pool;
Dispatcher dispatcher; Dispatcher dispatcher;
Gtk::Menu menu; Gtk::Menu menu;

2
src/project.hpp

@ -82,8 +82,6 @@ namespace Project {
class LLDB : public virtual Base { class LLDB : public virtual Base {
public: public:
~LLDB() override { dispatcher.disconnect(); }
#ifdef JUCI_ENABLE_DEBUG #ifdef JUCI_ENABLE_DEBUG
std::pair<std::string, std::string> debug_get_run_arguments() override; std::pair<std::string, std::string> debug_get_run_arguments() override;
Project::DebugOptions *debug_get_options() override; Project::DebugOptions *debug_get_options() override;

5
src/source_language_protocol.cpp

@ -384,7 +384,7 @@ void Source::LanguageProtocolView::initialize() {
update_status_state(this); update_status_state(this);
set_editable(false); set_editable(false);
initialize_thread = std::thread([this] { thread_pool.push([this] {
auto capabilities = client->initialize(this); auto capabilities = client->initialize(this);
dispatcher.post([this, capabilities] { dispatcher.post([this, capabilities] {
@ -419,9 +419,6 @@ void Source::LanguageProtocolView::close() {
autocomplete_delayed_show_arguments_connection.disconnect(); autocomplete_delayed_show_arguments_connection.disconnect();
update_type_coverage_connection.disconnect(); update_type_coverage_connection.disconnect();
if(initialize_thread.joinable())
initialize_thread.join();
if(autocomplete) { if(autocomplete) {
autocomplete->state = Autocomplete::State::idle; autocomplete->state = Autocomplete::State::idle;
if(autocomplete->thread.joinable()) if(autocomplete->thread.joinable())

1
src/source_language_protocol.hpp

@ -182,7 +182,6 @@ namespace Source {
size_t document_version = 1; size_t document_version = 1;
std::thread initialize_thread;
Dispatcher dispatcher; Dispatcher dispatcher;
Glib::ThreadPool thread_pool; Glib::ThreadPool thread_pool;

Loading…
Cancel
Save