1313#include  " Plugins/SymbolFile/DWARF/LogChannelDWARF.h" 
1414#include  " Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h" 
1515#include  " lldb/Core/Module.h" 
16- #include  " lldb/Host/TaskPool.h" 
1716#include  " lldb/Symbol/ObjectFile.h" 
1817#include  " lldb/Utility/Stream.h" 
1918#include  " lldb/Utility/Timer.h" 
19+ #include  " llvm/Support/ThreadPool.h" 
2020
2121using  namespace  lldb_private ; 
2222using  namespace  lldb ; 
@@ -71,20 +71,27 @@ void ManualDWARFIndex::Index() {
7171    clear_cu_dies[cu_idx] = units_to_index[cu_idx]->ExtractDIEsScoped ();
7272  };
7373
74+   //  Share one thread pool across operations to avoid the overhead of
75+   //  recreating the threads.
76+   llvm::ThreadPool pool;
77+ 
7478  //  Create a task runner that extracts dies for each DWARF unit in a
75-   //  separate thread
79+   //  separate thread. 
7680  //  First figure out which units didn't have their DIEs already
7781  //  parsed and remember this.  If no DIEs were parsed prior to this index
7882  //  function call, we are going to want to clear the CU dies after we are
7983  //  done indexing to make sure we don't pull in all DWARF dies, but we need
8084  //  to wait until all units have been indexed in case a DIE in one
8185  //  unit refers to another and the indexes accesses those DIEs.
82-   TaskMapOverInt (0 , units_to_index.size (), extract_fn);
86+   for  (size_t  i = 0 ; i < units_to_index.size (); ++i)
87+     pool.async (extract_fn, i);
88+   pool.wait ();
8389
8490  //  Now create a task runner that can index each DWARF unit in a
8591  //  separate thread so we can index quickly.
86- 
87-   TaskMapOverInt (0 , units_to_index.size (), parser_fn);
92+   for  (size_t  i = 0 ; i < units_to_index.size (); ++i)
93+     pool.async (parser_fn, i);
94+   pool.wait ();
8895
8996  auto  finalize_fn = [this , &sets](NameToDIE (IndexSet::*index)) {
9097    NameToDIE &result = m_set.*index;
@@ -93,14 +100,15 @@ void ManualDWARFIndex::Index() {
93100    result.Finalize ();
94101  };
95102
96-   TaskPool::RunTasks ([&]() { finalize_fn (&IndexSet::function_basenames); },
97-                      [&]() { finalize_fn (&IndexSet::function_fullnames); },
98-                      [&]() { finalize_fn (&IndexSet::function_methods); },
99-                      [&]() { finalize_fn (&IndexSet::function_selectors); },
100-                      [&]() { finalize_fn (&IndexSet::objc_class_selectors); },
101-                      [&]() { finalize_fn (&IndexSet::globals); },
102-                      [&]() { finalize_fn (&IndexSet::types); },
103-                      [&]() { finalize_fn (&IndexSet::namespaces); });
103+   pool.async (finalize_fn, &IndexSet::function_basenames);
104+   pool.async (finalize_fn, &IndexSet::function_fullnames);
105+   pool.async (finalize_fn, &IndexSet::function_methods);
106+   pool.async (finalize_fn, &IndexSet::function_selectors);
107+   pool.async (finalize_fn, &IndexSet::objc_class_selectors);
108+   pool.async (finalize_fn, &IndexSet::globals);
109+   pool.async (finalize_fn, &IndexSet::types);
110+   pool.async (finalize_fn, &IndexSet::namespaces);
111+   pool.wait ();
104112}
105113
106114void  ManualDWARFIndex::IndexUnit (DWARFUnit &unit, SymbolFileDWARFDwo *dwp,
0 commit comments