From e3d8fe4854a7ef7ff0637688cda9e65feb680122 Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Thu, 15 Oct 2026 12:37:10 +0300 Subject: Replace the writer spin lock with a blocking mutex term_write_begin spun on an atomic sequence word. A waiter burned CPU, and with no priority inheritance a SCHED_FIFO waiter could starve a preempted holder on the same CPU. The writer section is now a pthread mutex with PTHREAD_PRIO_INHERIT where the platform has it, and an SRWLOCK on Windows. Re-entry on the owning thread still only counts the depth. The platform wrapper (init, lock, unlock, destroy) is in compat.h. term_new initializes the mutex, and term_free destroys it. Meson links the thread library into the core, term_dep, and term_internal_dep. The README, term.h, and the amalgamation note say that POSIX needs -pthread. Tests: the feed and snapshot thread test now checks the final screen and history against a serial reference. A new test checks that term_lock nests and that another thread waits for the last term_unlock. Co-Authored-By: Claude Haiku 5.5 --- tools/amalgamate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/amalgamate.py b/tools/amalgamate.py index f2cdf3b..09c6c91 100644 --- a/tools/amalgamate.py +++ b/tools/amalgamate.py @@ -3,7 +3,7 @@ term.h joins the public headers. term.c joins every source file and puts each private header in at its first include. A host compiles term.c once, -with any C11 compiler, and links libm. +with any C11 compiler, and links libm and the thread library. amalgamate.py TERM_DIR OUT_DIR [DEPFILE] -- cgit v1.2.3