jolt/host/chez
Yogthos 6f433a1b3c Make blocking socket FFI collect-safe; fix http-client temp-file race
Two thread-safety bugs in the native FFI layer.

The HTTP server's accept/recv/send were plain foreign-procedures. A thread
inside a foreign call stays active for the stop-the-world collector, so the
accept loop sitting idle in accept() froze GC for the whole process whenever
another thread (a future, an async block) allocated. Mark the three blocking
calls __collect_safe so the thread deactivates for the call's duration —
collection proceeds while the accept thread waits. The args are an fd and
foreign-alloc'd buffers (outside the Scheme heap), so a collection mid-call has
nothing to move.

jolt.http-client built its -D header-file path from an unguarded (set! counter
(+ counter 1)) and counter mod 90000, with no per-process component. Concurrent
requests could compute the same path and clobber each other's headers. Use a
mutex-guarded monotonic counter plus the pid.

test/chez/ffi-server-test.ss exercises both (a (collect) while the server is
idle in accept(), temp-path uniqueness across threads, and a live request) and
is wired into the gate as `make ffi`.
2026-06-22 08:12:53 -04:00
..
seed Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
async.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
atoms.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
bigdec.ss real BigDecimal type (bigdec, M literals) 2026-06-22 00:01:01 -04:00
bootstrap.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
cli.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
collections.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
compile-eval.ss macroexpand-first analyzer order; one macro path; defmacro/letfn fixes 2026-06-22 00:54:16 -04:00
concurrency.ss Chez parity: delay / force / realized? (jolt-cf1q.7) 2026-06-20 17:02:42 -04:00
converters.ss Bind clojure.core/float (= double on Chez) 2026-06-21 15:39:21 -04:00
dot-forms.ss Host gaps that blocked malli: map .iterator, two clojure.lang builders 2026-06-22 05:35:08 -04:00
dyn-binding.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
dynamic-vars.ss compile (set! *var* val) 2026-06-22 00:40:46 -04:00
emit-image.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
host-class.ss resolve ^Type hint to canonical class name in var :tag 2026-06-21 23:52:47 -04:00
host-contract.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
host-static.ss Host gaps that blocked malli: map .iterator, two clojure.lang builders 2026-06-22 05:35:08 -04:00
host-table.ss sorted-map entries are real map-entries (jolt-jk23) 2026-06-21 16:43:05 -04:00
http-client.ss Make blocking socket FFI collect-safe; fix http-client temp-file race 2026-06-22 08:12:53 -04:00
http-server.ss Make blocking socket FFI collect-safe; fix http-client temp-file race 2026-06-22 08:12:53 -04:00
inst-time.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
io.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
lazy-bridge.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
loader.ss Host gaps that blocked malli: map .iterator, two clojure.lang builders 2026-06-22 05:35:08 -04:00
math.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
multimethods.ss defmethod auto-create copies clojure.core dispatch (fix SCI regression) 2026-06-21 20:04:13 -04:00
natives-array.ss real chunked seqs for vector seqs 2026-06-22 00:21:05 -04:00
natives-coll.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-meta.ss (type record) returns its class-name string, not a symbol 2026-06-22 00:05:08 -04:00
natives-misc.ss jolt.http-client (curl-backed) + format width/justify flags 2026-06-22 02:44:29 -04:00
natives-num.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-parity.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-seq.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-str.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
natives-xform.ss Chez Phase 2 (inc H): volatiles + sequence/transduce 2026-06-18 14:47:03 -04:00
ns.ss Host completeness for the ring stack (ring-app) 2026-06-22 03:20:31 -04:00
png.ss jolt.png: a built-in PNG writer (ray-tracer-multi) 2026-06-22 02:33:27 -04:00
post-prelude.ss real chunked seqs for vector seqs 2026-06-22 00:21:05 -04:00
predicates.ss Host interop fixes: ==/time/subvec/defonce + corpus cleanup 2026-06-21 15:36:41 -04:00
printing.ss JVM parity: unchecked-char -> char, pr of infinities -> ##Inf 2026-06-21 17:55:05 -04:00
reader.ss More library-compat fixes from porting the examples (markdown, malli) 2026-06-22 02:25:11 -04:00
records.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
regex.ss Host completeness for the ring stack (ring-app) 2026-06-22 03:20:31 -04:00
remint.sh Pure-Chez test gates (no Janet) 2026-06-21 11:22:32 -04:00
rt.ss real BigDecimal type (bigdec, M literals) 2026-06-22 00:01:01 -04:00
run-corpus.ss More library-compat fixes from porting the examples (markdown, malli) 2026-06-22 02:25:11 -04:00
run-sci.ss mutable deftype fields: (set! field val) in a method 2026-06-22 01:19:03 -04:00
run-unit.ss Cross-ns def/require/use/defmethod through the spine (jolt-c2l1) 2026-06-21 16:56:46 -04:00
selfcheck.sh Pure-Chez test gates (no Janet) 2026-06-21 11:22:32 -04:00
seq.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
smoke.sh Pure-Chez test gates (no Janet) 2026-06-21 11:22:32 -04:00
sqlite.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
syntax-quote.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
transients.ss assoc! fills nil for a trailing lone key (JVM parity) 2026-06-21 17:03:10 -04:00
values.ss Chez Phase 1 (increment 3b): seq tier + dynamic IFn dispatch on the Chez RT 2026-06-17 15:19:18 -04:00
vars.ss Chez Phase 2 (inc I+J): first-class vars + scalar natives 2026-06-18 15:44:10 -04:00