Index: src/wasm/wasm-module.h |
diff --git a/src/wasm/wasm-module.h b/src/wasm/wasm-module.h |
index 180f5bcde39f000fa0c9169eee1c0a0eea52ba4c..3329b69b5c1c742bd4d096b9f0563c6e0d316109 100644 |
--- a/src/wasm/wasm-module.h |
+++ b/src/wasm/wasm-module.h |
@@ -178,6 +178,14 @@ struct WasmModule { |
std::vector<uint16_t> function_table; // function table. |
std::vector<WasmImport> import_table; // import table. |
std::vector<WasmExport> export_table; // export table. |
+ // We store the semaphore here to extend its lifetime. In <libc-2.21, which we |
+ // use on the try bots, semaphore::Wait() can return while some compilation |
+ // tasks are still executing semaphore::Signal(). If the semaphore is cleaned |
+ // up right after semaphore::Wait() returns, then this can cause an |
+ // invalid-semaphore error in the compilation tasks. |
+ // TODO(wasm): Move this semaphore back to CompileInParallel when the try bots |
+ // switch to libc-2.21 or higher. |
+ base::SmartPointer<base::Semaphore> pending_tasks; |
WasmModule(); |