macOS: bundled oils shell intermittently fails fast external commands (getpgid ESRCH race)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Área
- build-system, testing-qa
Línea de trabajo
Lee crates/fspy/build.rs y localiza MACOS_BINARY_DOWNLOADS; primero confirma una versión de Oils que contenga el PR upstream #2689 y, después, vuelve a compilar el binario de macOS incluido. Ejecuta la reproducción paralela de fast-command y el script de smoke, comprobando que no haya fallos y que la salida de smoke sea idéntica byte a byte.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Symptom
A cached task on macOS intermittently reports exit 2 with empty stdout and oils I/O error (main): No such process on stderr. Seen in the wild running parallel test suites that spawn vp run (each task runs under the bundled osh, which fspy substitutes for /bin/sh).
Root cause
Not fspy's exec interposition — the bundled oils 0.37.0 itself. Process::RunProcess (core/process.py) calls getpgid(child_pid) right after fork() and before waitpid(). On macOS, getpgid() of a zombie child fails with ESRCH, so when the parent is descheduled past a fast command's exit (CPU contention), the OSError escapes to oils' main() → exit 2.
Reproduces with the raw oils binary, no fspy involved: ~5% under 6-8-way parallel loops of osh -c 'echo x > f; cat f'.
Fix
Upstream PR: https://github.com/oils-for-unix/oils/pull/2689 — gate the getpgid() on job control being enabled (MaybeGiveTerminal() no-ops otherwise, so batch shells never needed the pgid).
Once an oils release includes it: rebuild the bundled binary and bump MACOS_BINARY_DOWNLOADS in crates/fspy/build.rs.
Verification of the fix
Patched 0.37.0 tarball build (same one-liner in the generated C++): 2000 concurrent runs of the failing shapes, 0 failures (vs ~5% before); smoke script output byte-identical to the unpatched binary.
- Lenguaje dominante
- Rust
- Estrellas
- 466
- Forks
- 42
- Merge medio
- 1 d 20 h
- PR fusionados (30 d)
- 21
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 voidzero-dev/vite-task
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
voidzero-dev/vite-task#738 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
voidzero-dev/vite-task#719 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
voidzero-dev/vite-task#717 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
voidzero-dev/vite-task#700 · 2 comentarios ·
-
fspy_preload_unix: execl with 32+ arguments aborts on an out-of-bounds NULL terminator write Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
voidzero-dev/vite-task#699 ·
Todos los issues de voidzero-dev/vite-task
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug team:backend track:services-maintenance
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cowprotocol/services#4950 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
gitbutlerapp/gitbutler#15998 · 1 comentario ·
-
bug triage:deciding
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
open-telemetry/otel-arrow#4132 ·