summaryrefslogtreecommitdiff
path: root/src/wasm-module-building.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-module-building.h')
-rw-r--r--src/wasm-module-building.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/wasm-module-building.h b/src/wasm-module-building.h
index 3cdebc558..ead074991 100644
--- a/src/wasm-module-building.h
+++ b/src/wasm-module-building.h
@@ -86,7 +86,15 @@ class OptimizingIncrementalModuleBuilder {
public:
// numFunctions must be equal to the number of functions allocated, or higher. Knowing
// this bounds helps avoid locking.
- OptimizingIncrementalModuleBuilder(Module* wasm, Index numFunctions) : wasm(wasm), numFunctions(numFunctions), nextFunction(0), finishing(false) {
+ OptimizingIncrementalModuleBuilder(Module* wasm, Index numFunctions)
+ : wasm(wasm), numFunctions(numFunctions), endMarker(nullptr), list(nullptr), nextFunction(0),
+ numWorkers(0), liveWorkers(0), activeWorkers(0), availableFuncs(0), finishedFuncs(0),
+ finishing(false) {
+ if (numFunctions == 0) {
+ // special case: no functions to be optimized. Don't create any threads.
+ return;
+ }
+
// prepare work list
endMarker = new Function();
list = new std::atomic<Function*>[numFunctions];
@@ -139,7 +147,7 @@ public:
private:
void createWorker() {
DEBUG_THREAD("create a worker");
- threads.emplace_back(std::unique_ptr<std::thread>(new std::thread(workerMain, this)));
+ threads.emplace_back(make_unique<std::thread>(workerMain, this));
}
void wakeWorker() {
@@ -197,9 +205,8 @@ private:
passRunner.runFunction(func);
}
- static void workerMain(void* param) {
+ static void workerMain(OptimizingIncrementalModuleBuilder* self) {
DEBUG_THREAD("workerMain");
- OptimizingIncrementalModuleBuilder* self = (OptimizingIncrementalModuleBuilder*)param;
{
std::lock_guard<std::mutex> lock(self->mutex);
self->liveWorkers++;