Skip to content

Commit ab0a317

Browse files
authored
Merge pull request #1576 from JDevlieghere/🍒/e57361c055d7617ee25cdac8167625000d098ef5
[lldb/Host] Remove TaskPool and replace its uses with llvm::ThreadPool
2 parents af97c4b + 86294c7 commit ab0a317

File tree

7 files changed

+25
-286
lines changed

7 files changed

+25
-286
lines changed

lldb/include/lldb/Host/TaskPool.h

-92
This file was deleted.

lldb/include/lldb/module.modulemap

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ module lldb_Host {
4949
module SocketAddress { header "Host/SocketAddress.h" export * }
5050
module Socket { header "Host/Socket.h" export * }
5151
module StringConvert { textual header "Host/StringConvert.h" export * }
52-
module TaskPool { header "Host/TaskPool.h" export * }
5352
module Terminal { header "Host/Terminal.h" export * }
5453
module ThreadLauncher { header "Host/ThreadLauncher.h" export * }
5554
module Time { header "Host/Time.h" export * }

lldb/source/Host/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ add_host_subdirectory(common
4444
common/SocketAddress.cpp
4545
common/Socket.cpp
4646
common/StringConvert.cpp
47-
common/TaskPool.cpp
4847
common/TCPSocket.cpp
4948
common/Terminal.cpp
5049
common/ThreadLauncher.cpp

lldb/source/Host/common/TaskPool.cpp

-126
This file was deleted.

lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp

+25-20
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
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

2121
using namespace lldb_private;
2222
using namespace lldb;
@@ -55,25 +55,29 @@ void ManualDWARFIndex::Index() {
5555
clear_cu_dies[cu_idx] = units_to_index[cu_idx]->ExtractDIEsScoped();
5656
};
5757

58+
// Share one thread pool across operations to avoid the overhead of
59+
// recreating the threads.
60+
llvm::ThreadPool pool;
61+
5862
// Create a task runner that extracts dies for each DWARF unit in a
59-
// separate thread
63+
// separate thread.
6064
// First figure out which units didn't have their DIEs already
6165
// parsed and remember this. If no DIEs were parsed prior to this index
6266
// function call, we are going to want to clear the CU dies after we are
6367
// done indexing to make sure we don't pull in all DWARF dies, but we need
64-
// to wait until all compile units have been indexed in case a DIE in one
65-
// compile unit refers to another and the indexes accesses those DIEs.
66-
//----------------------------------------------------------------------
67-
for (int i=0; i<units_to_index.size(); ++i) {
68-
extract_fn(i);
69-
}
70-
// This call can deadlock because we are sometimes holding the module lock.
71-
//TaskMapOverInt(0, units_to_index.size(), extract_fn);
68+
// to wait until all units have been indexed in case a DIE in one
69+
// unit refers to another and the indexes accesses those DIEs.
70+
//
71+
// This call can deadlock because we are sometimes holding the module lock so
72+
// don't do it asynchronously.
73+
for (size_t i = 0; i < units_to_index.size(); ++i)
74+
extract_fn(i);
7275

7376
// Now create a task runner that can index each DWARF unit in a
7477
// separate thread so we can index quickly.
75-
76-
TaskMapOverInt(0, units_to_index.size(), parser_fn);
78+
for (size_t i = 0; i < units_to_index.size(); ++i)
79+
pool.async(parser_fn, i);
80+
pool.wait();
7781

7882
auto finalize_fn = [this, &sets](NameToDIE(IndexSet::*index)) {
7983
NameToDIE &result = m_set.*index;
@@ -82,14 +86,15 @@ void ManualDWARFIndex::Index() {
8286
result.Finalize();
8387
};
8488

85-
TaskPool::RunTasks([&]() { finalize_fn(&IndexSet::function_basenames); },
86-
[&]() { finalize_fn(&IndexSet::function_fullnames); },
87-
[&]() { finalize_fn(&IndexSet::function_methods); },
88-
[&]() { finalize_fn(&IndexSet::function_selectors); },
89-
[&]() { finalize_fn(&IndexSet::objc_class_selectors); },
90-
[&]() { finalize_fn(&IndexSet::globals); },
91-
[&]() { finalize_fn(&IndexSet::types); },
92-
[&]() { finalize_fn(&IndexSet::namespaces); });
89+
pool.async(finalize_fn, &IndexSet::function_basenames);
90+
pool.async(finalize_fn, &IndexSet::function_fullnames);
91+
pool.async(finalize_fn, &IndexSet::function_methods);
92+
pool.async(finalize_fn, &IndexSet::function_selectors);
93+
pool.async(finalize_fn, &IndexSet::objc_class_selectors);
94+
pool.async(finalize_fn, &IndexSet::globals);
95+
pool.async(finalize_fn, &IndexSet::types);
96+
pool.async(finalize_fn, &IndexSet::namespaces);
97+
pool.wait();
9398
}
9499

95100
void ManualDWARFIndex::IndexUnit(DWARFUnit &unit, IndexSet &set) {

lldb/unittests/Host/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ set (FILES
1111
SocketAddressTest.cpp
1212
SocketTest.cpp
1313
SocketTestUtilities.cpp
14-
TaskPoolTest.cpp
1514
)
1615

1716
if (CMAKE_SYSTEM_NAME MATCHES "Linux|Android")

lldb/unittests/Host/TaskPoolTest.cpp

-45
This file was deleted.

0 commit comments

Comments
 (0)