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

Concurrency docs and the race gate: state that a user data race is UNDEFINED (allocator corruption), enumerate the process-global surfaces for embedders, and extend the TSan slice to the shapes it never runs

Abierto
#1,152 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
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Documentación
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
c

Línea de trabajo

Start with docs/CONCURRENCY.md and docs/EMBEDDING.md, then inspect eigs_embed.h, src/embed_concurrent.c, and tests/test_tsan.sh. Compare the documented guarantees and existing TSan shapes with the listed probes and missing controls. Done means the process-global surfaces and undefined race behavior are documented and the specified clean concurrency shapes are covered by the gate.

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

Descripción

area:concurrency area:docs area:gates kind:docs-drift

Found by the 2026-09-14 whole-runtime concurrency review (three independent reviewers, every finding below reproduced by execution on main @ a18deac unless marked reading). Probe files live in ~/src/wt/briefs/conc-review/probes-{A,B,C}/.

Doc corrections (each verified by execution)

  • docs/CONCURRENCY.md says a closure race is "yours to avoid, exactly as in C" but frames it as lost updates. Measured: two workers appending to one list → realloc(): invalid old size / SIGSEV / double free or corruption (rc=134/139) within 10k iterations, 3/3 runs; a single WRITER plus a single READER on a module-level STRING binding crashes (slot_incref src/value_slot.h:91-93 from vm_run_ex src/vm.c:3597 outside g_module_env_lock vs env_set_hashed freeing the old value) — reads count. State plainly: any concurrent access to a shared container or binding, reads included, is undefined and can crash the process; #607's lock protects array growth only.
  • "messages copy" — see the buffer/text_builder/closure issue.
  • Worker exit semantics — see the worker-exit issue.
  • "collection resumes once all workers are joined" — see the GC issue.
  • "Replay boundary": any nondeterministic builtin on a worker while a tape is open is also unreplayable (torn tape) — see the tape issue.
  • EIGS_JIT_STATS=1 prints its footer once per worker detach (N+1 times) — cosmetic (reading).

Embed API (docs/EMBEDDING.md, eigs_embed.h)

Claims independent concurrent interpreters but does not enumerate the process-global surfaces reachable from two states on two threads: tape/sink/replay, arming sets, g_trace_current_line (vm.c:6148 writes it whenever the STATE is single-threaded — two states race on it), g_source_provider (eigs_embed.c:396-402), g_module_ns_tab, g_random_seeded, SIGPIPE. Only eigs_set_abort_flag is documented as process-global. src/embed_concurrent.c covers thresholds/globals/error flag only — no tape, no import, no nondet builtin, no close-while-other-runs — and is not in tests/test_tsan.sh.

Gate gaps (tests/test_tsan.sh, 13-file slice census)

Every file is main + 1-3 workers with 2-party channels. Never run: 3+ threads on one channel, close-while-blocked, nested spawn, worker throw, worker exit, cross-thread/double join, load_file/import/eval in a worker, tasks in a worker, a worker writing a NEW dict key, EIGS_TRACE/EIGS_REPLAY with workers, two embed states. The review's clean shapes (fan-in 3, close-while-blocked, nested spawn, worker errors, worker exit, tasks in workers, spawn while emitted JIT code runs, replay boundary #1112) should be enrolled as controls; the red shapes belong to their issues. #1139 adds the TSan-with-HTTP lane.

Lenguaje dominante
C
Estrellas
3
Forks
7
Merge medio
4 h 5 min
PR fusionados (30 d)
116

Preparar el entorno

Abrir en Codespaces

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

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 InauguralSystems/EigenScript

Todos los issues de InauguralSystems/EigenScript

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.