Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#1,152 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
ドキュメント
明瞭さ
おおむね明確
活発さ
活発
技術スタック
c

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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.

主要言語
C
スター
3
フォーク
7
平均マージ
4時間 15分
マージ済み PR(30日)
106

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

InauguralSystems/EigenScript のほかの issue

InauguralSystems/EigenScript の issue をすべて見る

似ている issue

C の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。