webassembly: Make mp_js_do_str asynchronous.
This fixes a bug where `gc.collect()` would crash due to emscripten_scan_stack being called synchronously within mp_js_do_str. The fix is to make mp_js_do_str asynchronous. Fixes #10692. Signed-off-by: Eli Bierman <eli@elib.dev>
This commit is contained in:
parent
0e215a9fba
commit
b2ad7e238b
|
@ -49,7 +49,7 @@ using the require command and the general API outlined below. For example:
|
||||||
var mp_js = require('./build/micropython.js');
|
var mp_js = require('./build/micropython.js');
|
||||||
|
|
||||||
mp_js_init(64 * 1024);
|
mp_js_init(64 * 1024);
|
||||||
mp_js_do_str("print('hello world')\n");
|
await mp_js_do_str("print('hello world')\n");
|
||||||
```
|
```
|
||||||
|
|
||||||
Running with HTML
|
Running with HTML
|
||||||
|
@ -77,7 +77,7 @@ something to stdout. The following code demonstrates basic functionality:
|
||||||
Module["onRuntimeInitialized"] = async function() {
|
Module["onRuntimeInitialized"] = async function() {
|
||||||
mp_js_startup();
|
mp_js_startup();
|
||||||
mp_js_init(64 * 1024);
|
mp_js_init(64 * 1024);
|
||||||
mp_js_do_str("print('hello world')");
|
await mp_js_do_str("print('hello world')");
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -108,7 +108,7 @@ Initialize MicroPython with the given stack size in bytes. This must be
|
||||||
called before attempting to interact with MicroPython.
|
called before attempting to interact with MicroPython.
|
||||||
|
|
||||||
```
|
```
|
||||||
mp_js_do_str(code)
|
await mp_js_do_str(code)
|
||||||
```
|
```
|
||||||
|
|
||||||
Execute the input code. `code` must be a `string`.
|
Execute the input code. `code` must be a `string`.
|
||||||
|
|
|
@ -29,7 +29,7 @@ var Module = {};
|
||||||
var mainProgram = function()
|
var mainProgram = function()
|
||||||
{
|
{
|
||||||
mp_js_init = Module.cwrap('mp_js_init', 'null', ['number']);
|
mp_js_init = Module.cwrap('mp_js_init', 'null', ['number']);
|
||||||
mp_js_do_str = Module.cwrap('mp_js_do_str', 'number', ['string']);
|
mp_js_do_str = Module.cwrap('mp_js_do_str', 'number', ['string'], {async: true});
|
||||||
mp_js_init_repl = Module.cwrap('mp_js_init_repl', 'null', ['null']);
|
mp_js_init_repl = Module.cwrap('mp_js_init_repl', 'null', ['null']);
|
||||||
mp_js_process_char = Module.cwrap('mp_js_process_char', 'number', ['number']);
|
mp_js_process_char = Module.cwrap('mp_js_process_char', 'number', ['number']);
|
||||||
|
|
||||||
|
@ -75,7 +75,9 @@ var mainProgram = function()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
process.exitCode = mp_js_do_str(contents);
|
mp_js_do_str(contents).then(exitCode => {
|
||||||
|
process.exitCode = exitCode
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue