Possible `ExitEvent` leak when `BlockingCall()` returns `napi_closing`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Tranquilo
- Área
- operating-systems
Línea de trabajo
Comienza en SetupExitCallback en src/unix/pty.cc y src/win/conpty.cc, siguiendo la propiedad en torno a BlockingCall y la rama napi_closing. Aplica la limpieza sugerida por el issue en ambas implementaciones y verifica después que ExitEvent se libera cuando el callback no se pone en cola y que, en caso contrario, permanece bajo la propiedad del callback.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Possible ExitEvent leak when BlockingCall() returns napi_closing
I found a possible native heap leak in the pty exit watcher when the thread-safe function is closing.
Files: src/unix/pty.cc, src/win/conpty.cc
Function: SetupExitCallback
Relevant Unix code:
auto callback = [](Napi::Env env, Napi::Function cb, ExitEvent *exit_event) {
cb.Call({Napi::Number::New(env, exit_event->exit_code),
Napi::Number::New(env, exit_event->signal_code)});
delete exit_event;
};
// ...
ExitEvent *exit_event = new ExitEvent;
// fill exit_event
auto status = tsfn.BlockingCall(exit_event, callback);
switch (status) {
case napi_closing:
break;
case napi_queue_full:
Napi::Error::Fatal("SetupExitCallback", "Queue was full");
case napi_ok:
if (tsfn.Release() != napi_ok) {
Napi::Error::Fatal("SetupExitCallback", "ThreadSafeFunction.Release() failed");
}
break;
}
The Windows implementation has the same ownership pattern.
The ExitEvent is deleted only by the JS-thread callback. If BlockingCall()
returns napi_closing, the item was not queued and that callback will not run.
The case napi_closing: branch then drops the only pointer to exit_event.
This is a small teardown-race leak: one ExitEvent per pty whose exit races
Node-API environment shutdown.
Suggested fix: delete exit_event in the napi_closing branch, where ownership
was not transferred to the callback queue.
- Lenguaje dominante
- TypeScript
- Estrellas
- 2k
- Forks
- 337
- Merge medio
- 21 h 58 min
- PR fusionados (30 d)
- 3
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.
Más de microsoft/node-pty
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Windows: conin socket has no 'error' listener, so a failed pty write is an uncaught exception Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Todos los issues de microsoft/node-pty
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
[Bug]: Matrix progress drafts fail with "Matrix runtime not initialized" during tool activity Abiertobug clawsweeper:linked-pr-open clawsweeper:needs-live-repro clawsweeper:no-new-fix-pr impact:message-loss issue-rating: 🐚 platinum hermit P2 regression
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Client support matrix inclusion Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
calcite-components needs triage refactor
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Esri/calcite-design-system#15203 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
fullcalendar/fullcalendar#8106 ·