[WasmFS] Ensure error codes are negative in the Node backend#26598
Conversation
See commit 48459c6 for details.
Good question, I suspect it's because absolute path access doesn't work with |
|
For reference, see the CircleCI log at https://circleci.com/gh/emscripten-core/emscripten/1164699 for the failure. Details======================================================================
FAIL [0.001s]: test_fs_js_api_wasmfs_rawfs (test_core.core0)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/root/project/test/common.py", line 377, in resulting_test
return func(self, *args)
File "/root/project/test/decorators.py", line 324, in metafunc
return func(self, *args, **kwargs)
File "/root/project/test/test_core.py", line 5915, in test_fs_js_api
self.do_runf('fs/test_fs_js_api.c', 'success')
File "/root/project/test/common.py", line 1408, in do_runf
return self._build_and_run(filename, expected_output, **kwargs)
File "/root/project/test/common.py", line 1456, in _build_and_run
js_output = self.run_js(js_file, engine, args,
File "/root/project/test/common.py", line 1040, in run_js
self.fail('JS subprocess failed (%s): %s (expected=%s). Output:\n%s' % (error.cmd, error.returncode, assert_returncode, ret))
AssertionError: JS subprocess failed (/root/emsdk/node/22.16.0_64bit/bin/node --stack-trace-limit=50 --trace-uncaught /tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js): 1 (expected=0). Output:
Aborted(Assertion failed: err < 0, at: /emsdk/emscripten/system/lib/wasmfs/syscalls.cpp,1067,__syscall_renameat)
Aborted(Assertion failed)
/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:552
var e = new WebAssembly.RuntimeError(what);
^
RuntimeError: Aborted(Assertion failed)
at abort (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:552:11)
at assert (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:269:5)
at test_fs_rename (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:2763:456)
at wasm://wasm/000901ea:wasm-function[49]:0x152b
at wasm://wasm/000901ea:wasm-function[50]:0x1562
at /tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:567:12
at callMain (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:3044:15)
at doRun (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:3097:24)
at run (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:3110:5)
at removeRunDependency (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:798:11)
at receiveInstance (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:671:5)
at receiveInstantiationResult (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:688:12)
at createWasm (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:714:17)
Thrown at:
at abort (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:552:11)
at assert (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:269:5)
at test_fs_rename (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:2763:456)
at $func49 (wasm://wasm/000901ea:1:5420)
at $main (wasm://wasm/000901ea:1:5475)
at /tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:567:12
at callMain (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:3044:15)
at doRun (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:3097:24)
at run (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:3110:5)
at removeRunDependency (/tmp/emtest_7ktg8cnu/emscripten_test_core0_v8vtv858/test_fs_js_api.js:798:11)
Node.js v22.16.0
----------------------------------------------------------------------
Ran 1145 tests in 674.466s
FAILED (failures=1, skipped=67)Which is this emscripten/system/lib/wasmfs/syscalls.cpp Line 1067 in 57df161 |
|
|
||
| auto childPath = getChildPath(name); | ||
| return _wasmfs_node_rename(fromPath.c_str(), childPath.c_str()); | ||
| return -_wasmfs_node_rename(fromPath.c_str(), childPath.c_str()); |
There was a problem hiding this comment.
Actually I think this is wrong. IIUC, there are 3 classes of functions at play:
- The
_wasmfs_node_xxxAPI. These return positive error codes. - The internal C++ API for wasm (e.g.
insertMove). These also return positive error codes. - The __syscall_xxx API: These return negative error codes.
There was a problem hiding this comment.
Are you sure about point (2)? See for example:
emscripten/system/lib/wasmfs/file.h
Lines 409 to 416 in bc56904
There was a problem hiding this comment.
Oh.. I stand corrected. Sorry about that.
|
lgtm! |
See commit 48459c6 for details.
Split out from #24733, this fixes a test failure in
core0.test_fs_js_api_wasmfs_rawfsfrom that PR.