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

Concurrency foundation: get the threading model right before parallel/GPU work (tracking)

Open
#1,153 3 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Active
Tech stack
c

Research direction

Start with the whole-runtime concurrency review and the probes under ~/src/wt/briefs/conc-review/, then read the unchecked Tier 1 and Tier 2 issues listed here. The tracking work spans memory safety, runtime contracts, documentation, and the proposed tsan-http Makefile target and CI lane; done means the selected findings and gate debt are resolved and verified.

Written by the indexing model from the issue text.

Description

area:concurrency kind:tracking

Jon, 2026-09-14: "we really need to get concurrency right, that way when we get gpu access we have a solid foundation for parallelism."

A whole-runtime concurrency review (three independent reviewers, every finding executed on main @ a18deac; probes kept under ~/src/wt/briefs/conc-review/) produced the issues below. They are ordered by the fix set that closes the most with the least: the first five are memory-unsafety in programs with NO user-written race; the rest are silent-wrong contracts and the doc/gate debt.

Tier 1 — memory unsafety without a user race

  • #1141 dict keys interned per thread dangle after a worker exits (spawn → join → read reads garbage)
  • #1142 the trace tape has no lock: sink buffer overflow, torn tapes (workers AND HTTP states), replay-reader use-after-free, observer-config ping-pong
  • #1144 load_file/import from a worker: per-STATE loading stack, unlocked module cache, module namespace table freed under readers (false "circular dependency")
  • #1145 arming sets realloc'd under readers (occurrence tier never widened; two embed states race with no spawn)
  • #1161 module-env lock (#607) keyed on a predicate that is false for imported modules — never locked (found landing #1141)
  • #1162 embed API: a host thread attach/eval/detach frees its intern table — global env names incl. builtins dangle for the state (pre-existing, found reviewing #1141)
  • #1146 thread_join has no claim step (double join = UB hang); handle ids recycle without a generation; full table → silent null
  • #1140 HTTP: a code route mutates the live route table from a worker

Tier 2 — silent-wrong contracts

  • #1147 cycle collector off for the rest of the run after the first spawn (117x peak RSS)
  • #1148 "messages copy" is false for buffer / text_builder / closures
  • #1149 exit inside a worker does not stop the program; main blocked in recv hangs forever
  • #1150 random shares libc's generator state across workers with a racy seed
  • #1151 process-wide SIGPIPE flip; print ignores flush errors
  • #1143 eigs_close on one embed state shuts the tape for every other state

Docs and the gate

  • #1152 state that user races are UNDEFINED (allocator corruption), enumerate the process-global surfaces for embedders, extend the TSan slice to the shapes it never runs
  • #1139 a tsan-http Makefile target and CI lane (the ad-hoc one found #1137)

Verified sound (by execution) — the foundation to build on

Channel semantics incl. close-while-blocked and multi-receiver; nested spawn and tasks inside workers; the per-thread cooperative scheduler; the refcount-atomics flip and every raw refcount site; per-thread freelists under the copy rule for lists/dicts; the JIT cliff incl. a spawn while emitted code is running; the replay boundary for recv; the binding-count and config-cache fixes from #1137.

Where the stress would come from

No consumer in the ecosystem exercises OS-thread parallelism today (eddy covers the COOPERATIVE layer against Porcupine/Elle; hq/PORTFOLIO.md lists the true-parallel slice as uncovered). Once Tier 1 lands, a parallel consumer is the forcing function: a portfolio SAT solver in EigenMiniSat (N workers, N seeds, first result wins over a channel, native MiniSat as the oracle) and a parallel tensor workload (the shape GPU work will take) are the two natural candidates.

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

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.