Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

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

Open
#1,152 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Documentation
Clarity
Mostly clear
Activity status
Active
Tech stack
c

Research direction

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.

Written by the indexing model from the issue text.

Description

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.

Dominant language
C
Stars
3
Forks
7
Avg merge
3h 58m
Merged PRs (30d)
105

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from InauguralSystems/EigenScript

All issues in InauguralSystems/EigenScript

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.