mirror of
https://github.com/logos-messaging/nim-ffi.git
synced 2026-06-20 08:19:55 +00:00
PR #71 stood up the event thread + bounded queue but left dispatch inline, so a blocking consumer callback stalled request processing on the FFI thread. Wire the producer side onto the existing queue: the FFI thread now enqueues (copyToShared/dupSharedCString/enqueueFFIEvent) and returns immediately; the event thread drains and invokes callbacks under reg.lock. This keeps the event thread as watchdog *and* dispatcher. Because callbacks no longer run on the FFI thread, a callback may issue a synchronous sendRequestToFFIThread without tripping the reentrancy guard (the FFI thread is separate) — a callback still must not add/remove listeners on its own registry. A wedged callback fills the queue and latches eventQueueStuck, which sendRequestToFFIThread surfaces as backpressure. Reworked the lock-during-invocation test to drive through the real event thread, and added a test for the now-safe sync-request-from-callback path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
nim-ffi
Allows exposing Nim projects to other languages
Example
examples/timer is now a self-contained Nimble project that imports nim-ffi directly.
Use cd examples/timer && nimble install -y ../.. && nimble build to compile the example.
Description
Languages
Nim
87.9%
Smarty
5.9%
C++
4.8%
CMake
1.4%