Worker terminates with error in Mac OS
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
Version
16.16.0
Platform
macOS 11.6.8 5 20G730
Subsystem
No response
What steps will reproduce the bug?
Examples in our CI:
- https://github.com/vitest-dev/vitest/runs/7704223380?check_suite_focus=true
- https://github.com/vitest-dev/vitest/runs/7685754161?check_suite_focus=true
After all tests are done, we are getting the error:
Assertion failed: (napi_create_external(env, fseenv, fse_environment_destroy, NULL, &result) == napi_ok), function fse_environment_create, file ../src/fsevents.c, line 87
I wasn't able to find this file in Node repo.
We are also getting Empty MaybeLocal error sometimes, which might be connected:
- https://github.com/vitest-dev/vitest/runs/7685755871?check_suite_focus=true
- https://github.com/vitest-dev/vitest/runs/7685757762?check_suite_focus=true
I am not able to reproduce it on smaller scale for now, unfortunately. It seems, there is some kind of race condition.
Code that fires up workers:
You can also notice that errors happen with "close with time out", this code is triggered here:
I am able to reproduce it almost consistently in Vitest core tests:
- Download Vitest repo (only
node/reproducebranch is needed) - run
pnpm install
cd test/core
ppm run test
If you comment out this.pool?.close() (which is an async noop), you should see error less time. But I got a new error with it:
node[28013]: ../src/node_file-inl.h:160:virtual node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array, void> >::~FSReqPromise() [AliasedBufferT = node::AliasedBufferBase<double, v8::Float64Array, void>]: Assertion `finished_' failed.
1: 0x102dd46e8 node::Abort() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
2: 0x102dd452c node::AppendExceptionLine(node::Environment*, v8::Local<v8::Value>, v8::Local<v8::Message>, node::ErrorHandlingMode) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
3: 0x102dd0e44 node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array, void> >::ResolveStat(uv_stat_t const*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
4: 0x102dd8e58 node::fs::FSReqAfterScope::~FSReqAfterScope() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
5: 0x102dd9310 node::fs::AfterOpenFileHandle(uv_fs_s*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
6: 0x103642bd4 uv__work_done [/<root>/.nvm/versions/node/v16.16.0/bin/node]
7: 0x103646370 uv__async_io [/<root>/.nvm/versions/node/v16.16.0/bin/node]
8: 0x1036580e8 uv__io_poll [/<root>/.nvm/versions/node/v16.16.0/bin/node]
9: 0x103646800 uv_run [/<root>/.nvm/versions/node/v16.16.0/bin/node]
10: 0x102d22ccc node::SpinEventLoop(node::Environment*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
11: 0x102e66df4 node::worker::Worker::Run() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
12: 0x102e6a01c node::worker::Worker::StartThread(v8::FunctionCallbackInfo<v8::Value> const&)::$_3::__invoke(void*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
13: 0x1a8a6026c _pthread_start [/usr/lib/system/libsystem_pthread.dylib]
14: 0x1a8a5b08c thread_start [/usr/lib/system/libsystem_pthread.dylib]
Run it a few times, if you don't see an error.
If I comment out this.close entirely, I get this error:
#
# Fatal error in , line 0
# Check failed: result.second.
#
#
#
#FailureMessage Object: 0x1763693a8
1: 0x1008efff4 node::NodePlatform::GetStackTracePrinter()::$_3::__invoke() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
2: 0x101691dd0 V8_Fatal(char const*, ...) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
3: 0x100c76684 v8::internal::GlobalBackingStoreRegistry::Register(std::__1::shared_ptr<v8::internal::BackingStore>) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
4: 0x1009f2dbc v8::ArrayBuffer::GetBackingStore() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
5: 0x10086f9bc node::Buffer::Data(v8::Local<v8::Value>) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
6: 0x1008991b0 node::fs::Read(v8::FunctionCallbackInfo<v8::Value> const&) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
7: 0x100a4cea8 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
8: 0x100a4c9a0 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
9: 0x100a4c22c v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
10: 0x10118cd0c Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit [/<root>/.nvm/versions/node/v16.16.0/bin/node]
11: 0x101120858 Builtins_InterpreterEntryTrampoline [/<root>/.nvm/versions/node/v16.16.0/bin/node]
12: 0x10114fe54 Builtins_AsyncFunctionAwaitResolveClosure [/<root>/.nvm/versions/node/v16.16.0/bin/node]
13: 0x1011d4cf8 Builtins_PromiseFulfillReactionJob [/<root>/.nvm/versions/node/v16.16.0/bin/node]
14: 0x101142234 Builtins_RunMicrotasks [/<root>/.nvm/versions/node/v16.16.0/bin/node]
15: 0x10111e524 Builtins_JSRunMicrotasksEntry [/<root>/.nvm/versions/node/v16.16.0/bin/node]
16: 0x100aefe5c v8::internal::(anonymous namespace)::Invoke(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
17: 0x100af0290 v8::internal::(anonymous namespace)::InvokeWithTryCatch(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
18: 0x100af037c v8::internal::Execution::TryRunMicrotasks(v8::internal::Isolate*, v8::internal::MicrotaskQueue*, v8::internal::MaybeHandle<v8::internal::Object>*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
19: 0x100b12fb8 v8::internal::MicrotaskQueue::RunMicrotasks(v8::internal::Isolate*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
20: 0x100b1384c v8::internal::MicrotaskQueue::PerformCheckpoint(v8::Isolate*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
21: 0x1007dddb4 node::InternalCallbackScope::Close() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
22: 0x1007dd7c4 node::InternalCallbackScope::~InternalCallbackScope() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
23: 0x10088c980 node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array, void> >::Resolve(v8::Local<v8::Value>) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
24: 0x100895194 node::fs::AfterStat(uv_fs_s*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
25: 0x1010febd4 uv__work_done [/<root>/.nvm/versions/node/v16.16.0/bin/node]
26: 0x101102370 uv__async_io [/<root>/.nvm/versions/node/v16.16.0/bin/node]
27: 0x1011140e8 uv__io_poll [/<root>/.nvm/versions/node/v16.16.0/bin/node]
28: 0x101102800 uv_run [/<root>/.nvm/versions/node/v16.16.0/bin/node]
29: 0x1007deccc node::SpinEventLoop(node::Environment*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
30: 0x100922df4 node::worker::Worker::Run() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
31: 0x10092601c node::worker::Worker::StartThread(v8::FunctionCallbackInfo<v8::Value> const&)::$_3::__invoke(void*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
32: 0x1a8a6026c _pthread_start [/usr/lib/system/libsystem_pthread.dylib]
33: 0x1a8a5b08c thread_start [/usr/lib/system/libsystem_pthread.dylib]
If I call pool.destroy() inside pool.close, I also get the error quite often:
FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal.
1: 0x1043206e8 node::Abort() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
2: 0x104320870 node::errors::TryCatchScope::~TryCatchScope() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
3: 0x104471dc4 v8::V8::ToLocalEmpty() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
4: 0x10431c9a0 node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array, void> >::Resolve(v8::Local<v8::Value>) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
5: 0x10432522c node::fs::AfterInteger(uv_fs_s*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
6: 0x104b8ebd4 uv__work_done [/<root>/.nvm/versions/node/v16.16.0/bin/node]
7: 0x104b92370 uv__async_io [/<root>/.nvm/versions/node/v16.16.0/bin/node]
8: 0x104ba40e8 uv__io_poll [/<root>/.nvm/versions/node/v16.16.0/bin/node]
9: 0x104b92800 uv_run [/<root>/.nvm/versions/node/v16.16.0/bin/node]
10: 0x10426eccc node::SpinEventLoop(node::Environment*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
11: 0x1043b2df4 node::worker::Worker::Run() [/<root>/.nvm/versions/node/v16.16.0/bin/node]
12: 0x1043b601c node::worker::Worker::StartThread(v8::FunctionCallbackInfo<v8::Value> const&)::$_3::__invoke(void*) [/<root>/.nvm/versions/node/v16.16.0/bin/node]
13: 0x1a8a6026c _pthread_start [/usr/lib/system/libsystem_pthread.dylib]
14: 0x1a8a5b08c thread_start [/usr/lib/system/libsystem_pthread.dylib]
What do you see instead?
Cannot read properties of undefined (reading 'slice')
216
examples/vue test: Assertion failed: (napi_create_external(env, fseenv, fse_environment_destroy, NULL, &result) == napi_ok), function fse_environment_create, file ../src/fsevents.c, line 87.
218
Additional information
No response
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza reproduciendo el fallo en las pruebas principales de Vitest con pnpm install y los comandos del issue. Lee la referencia de inicio del worker en packages/vitest/src/node/pool.ts y la ruta del timeout de cierre en packages/vitest/src/node/core.ts, y después compara los traces de macOS Node v16. La tarea estará terminada cuando el apagado del worker ya no produzca las assertions ni los errores fatales indicados.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, macos, nodejs
- Área
- backend, operating-systems
- Tipo de issue
- Error
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Tranquilo
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 35/100