Comments (7)
please provide the reproducer, otherwise we can't verify
from wazero.
closing until you give us the minimal repro. Note that executing a module instance concurrently is inherently unsafe and not possible unless you use the threading proposal enabled + your binary is compiled in that way.
from wazero.
As described in this comment - a compilation engine is getting re-used/shared between runtimes.
The wazevo
engine comes with an internal map named compiledModules
. When creating runtimes & compiling modules happens concurrently - a race condition occurs with accessing the said map. This happens in here
from wazero.
I'd be glad to provide example(s), propose a fix etc. Just want to see this one getting resolved 😊
from wazero.
A bit of background to the story - issue has been observed while working on a high-level library that steps on top of wazero
and takes care to hide away complexity associated with working with the linear memory etc. This one - we plan to open-source as soon we have the APIs somewhat final.
from wazero.
@mathetake - update of my previous comment (was on my phone, on my way to work)
As described in this comment - a compilation engine is getting re-used/shared between runtimes.
The wazevo
engine comes with an internal map named compiledModules
. When creating runtimes & compiling modules happens concurrently - a race condition occurs with accessing the said map. This happens like so:
As the "callstack" suggests - there's no logic to govern access to the said map and the said map is not thread-safe. As a result - a race condition occurs as soon as you try and use a single cache instance among multiple runtime instances and you try to load/execute modules concurrently.
It is evident that we're talking about a bug in here. If you take a look at the implementation of CompiledModuleCount
for wazevo
(see: here) - read-only access to the said map is governed appropriately.
from wazero.
A potential fix for the problem is to create a "private" function to check if a module has been compiled already. Something like:
func (e *engine) isCompiled(m *wasm.Module) bool {
e.mux.RLock()
defer e.mux.RUnlock()
_, ok := e.compiledModules[m.ID]
return ok
}
and replace the direct access to the map in here with calling the said function.
from wazero.
Related Issues (20)
- flaky test: Test_pathOpen_Errors/trailing_slash_on_file on Windows
- [Question] How to handle importing memory HOT 4
- compiler(arm64) overflow in call relocations HOT 8
- Can a Runtime be reused in parallel and across multiple mutually-untrusted modules? HOT 2
- Please tell me how to properly handle stdio HOT 3
- GOOS=wasip1 embedding wazero succeeds with wasmtime but fails with wazero on arm64 HOT 5
- Make compilation faster HOT 5
- Support dialing sockets, udp, tcp, unix. HOT 3
- `wazero.NewCompilationCache` creates a `CompilationCache` instance that's not really caching anything HOT 8
- Race condition during module interpretation with `interpreter` engine HOT 1
- When using `Instantiate` & `InstantiateWithConfig` modules are removed implicitly from the in-memory cache
- Binary built with simd128 works with arm64 but fails with amd64 HOT 12
- Plans to support component model? HOT 4
- wasm debug build crashes HOT 9
- performance issue in browser environment HOT 3
- [help want] the program is hangup when read my net file system HOT 1
- [Question] Compilation cache over different versions HOT 1
- `unreachable` error and stack trace if compiled and extra memory, not otherwise HOT 3
- Clarification on concurrency semantics for invocations HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wazero.