Fix passStringToWasm with shared memory

Looks like `TextEncoder#encodeInto` isn't compatible when the buffer
passed in is backed by a `SharedArrayBuffer`, so if the module has a
shared thread skip the `encodeInto` optimization entirely.
This commit is contained in:
Alex Crichton 2019-02-28 14:57:55 -08:00
parent c62f6529d8
commit 233525d7d6

View File

@ -1211,21 +1211,20 @@ impl<'a> Context<'a> {
debug
);
// Looks like `encodeInto` doesn't currently work when the memory passed
// in is backed by a `SharedArrayBuffer`, so force usage of `encode` if
// a `SharedArrayBuffer` is in use.
let shared = self.module.memories.get(self.memory).shared;
match self.config.encode_into {
EncodeInto::Never => {
self.global(&format!(
"function passStringToWasm(arg) {{ {} }}",
use_encode,
));
}
EncodeInto::Always => {
EncodeInto::Always if !shared => {
self.require_internal_export("__wbindgen_realloc")?;
self.global(&format!(
"function passStringToWasm(arg) {{ {} }}",
use_encode_into,
));
}
EncodeInto::Test => {
EncodeInto::Test if !shared => {
self.require_internal_export("__wbindgen_realloc")?;
self.global(&format!(
"
@ -1240,6 +1239,12 @@ impl<'a> Context<'a> {
use_encode,
));
}
_ => {
self.global(&format!(
"function passStringToWasm(arg) {{ {} }}",
use_encode,
));
}
}
Ok(())
}