Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[operation-graph] WatchLoop.runIPCAsync never exits when the IPC host disconnects, so heft run-watch outlives its host

Abierto Apto para principiantes
#6,123 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
node.js, typescript
Área
devtools

Línea de trabajo

Encuentra WatchLoop.runIPCAsync en el paquete @rushstack/operation-graph y lee el procesamiento existente de mensajes IPC. Reproduce el caso notificado desconectando o terminando el host y, a continuación, comprueba si las pruebas del bucle de observación cubren este caso. El trabajo estará terminado cuando el bucle finalice y Heft se cierre después de que se cierre el canal IPC, sin alterar el comportamiento existente del comando exit.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

🤖 Filed by GitHub Copilot acting for @namankanakiya (light review only).

Package: @rushstack/operation-graph 0.7.4 (via @rushstack/heft 1.3.2). Linux, Node 22.

Repro: in any Heft project, create host.js:

const cp = require('child_process').fork(
  require.resolve('@rushstack/heft/bin/heft'),
  ['run-watch', '--only', 'build'],
  { stdio: ['inherit', 'inherit', 'inherit', 'ipc'] }
);
setTimeout(() => process.kill(process.pid, 'SIGKILL'), 30000);

Run node host.js.

Observed: after the host dies, heft run-watch keeps running forever with ppid 1. Inside it, process.connected === false and there are no 'disconnect' listeners; its file watchers keep the event loop alive, so it holds its memory indefinitely. The same happens after cp.disconnect(). In a large monorepo where a Rush plugin hosts many such IPC watchers, a crashed or OOM-killed host left orphaned watcher groups totaling ~19-33 GB RSS.

Expected: when the IPC host's channel closes, the watch loop ends and heft exits, the same as on the host's exit command.

Suggested fix: in WatchLoop.runIPCAsync, add host.once('disconnect', () => resolve()) (or reject with an error) next to the 'message' handler, so a lost host is treated like the exit command.

Happy to test a candidate fix.

Lenguaje dominante
TypeScript
Estrellas
6.5k
Forks
710
Merge medio
1 d 13 h
PR fusionados (30 d)
45

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/rushstack

Todos los issues de microsoft/rushstack

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.