diff --git a/src/backend/game.cpp b/src/backend/game.cpp index 6e123c35..11099263 100644 --- a/src/backend/game.cpp +++ b/src/backend/game.cpp @@ -580,7 +580,7 @@ namespace loot { boost::thread_group group; size_t meanFileSize = 0; unordered_map tempMap; - std::vector groupPlugins; + std::set skipPlugins; //First calculate the mean plugin size. Store it temporarily in a map to reduce filesystem lookups and file size recalculation. for (fs::directory_iterator it(this->DataPath()); it != fs::directory_iterator(); ++it) { if (fs::is_regular_file(it->status()) && IsPlugin(it->path().string())) { @@ -601,24 +601,19 @@ namespace loot { auto plugin = plugins.emplace(pluginPair.first, Plugin(pluginPair.first)); if (pluginPair.second > meanFileSize) { - BOOST_LOG_TRIVIAL(trace) << "Creating individual loading thread for: " << pluginPair.first; - group.create_thread([this, plugin, headersOnly]() { - BOOST_LOG_TRIVIAL(trace) << "Loading " << plugin.first->second.Name() << " individually."; + skipPlugins.insert(pluginPair.first); + group.create_thread([this, &plugin, headersOnly]() { plugin.first->second = Plugin(*this, plugin.first->first, headersOnly); }); } - else { - groupPlugins.push_back(&plugin.first->second); - } } - group.create_thread([this, &groupPlugins, headersOnly]() { - for (auto plugin : groupPlugins) { - const std::string name = plugin->Name(); - BOOST_LOG_TRIVIAL(trace) << "Loading " << plugin->Name() << " as part of a group."; - *plugin = Plugin(*this, name, headersOnly); + group.create_thread([this, &skipPlugins, headersOnly]() { + for (auto &pluginPair : this->plugins) { + if (skipPlugins.find(pluginPair.first) == skipPlugins.end()) { + pluginPair.second = Plugin(*this, pluginPair.first, headersOnly); + } } }); - group.join_all(); }