BBS: TELESC.NET.BR Assunto: src/syncterm/scripts/load/wrentest.wren src/syncterm/wren_bind.c wren_ De: Deuc¨ Data: Mon, 27 Apr 2026 16:09:27 -0700 ----------------------------------------------------------- https://gitlab.synchro.net/main/sbbs/-/commit/02259da7fd489d53a2b8bca7 Modified Files: src/syncterm/scripts/load/wrentest.wren src/syncterm/wren_bind.c wren_host.c wren_host_internal.h Log Message: SyncTERM: Wren foreign-type tags + output-dispatch re-entry fix Three related changes shaken out by the wrentest suite: * Tag every wren_* foreign struct with a leading `enum syncterm_wren_foreign type` so foreign-method bodies can identify which foreign they hold (wrenGetSlotType only reports WREN_TYPE_FOREIGN, not the class). `slot_foreign_type()` reads the tag; `fn_Screen_writeRect` uses it to fast-path a Cells argument straight to ciolib_vmem_puttext with no copy or iteration, while still accepting a List of Cell. * Guard against wrenCall re-entry from inside fn_Conn_send / fn_Conn_sendRaw. Calling wrenCall while a foreign method is on the stack resets vm->fiber->stackTop (wren_vm.c:1464) and corrupts the outer fiber, producing unbounded recursion or SIGSEGV. fn_Conn_send now brackets conn_send with state.output_dispatching++/--, so wren_host_dispatch_output short-circuits for sends that originated inside Wren. C-side conn_send (terminal responses, modem keepalives) still fires hooks normally. * Drop wren_cell.parent (a raw pointer to a sibling Cells' foreign data, valid only as long as the Cells stayed in slot 0) and replace with parent_buf the malloc'd vmem_cell buffer pointer captured at view creation, kept alive by the existing parent_handle pin. No raw foreign-data pointer held across VM calls, no scratch slot needed for cell_data(). Plus test fixes in wrentest.wren: rect-roundtrip uses the natural readRect mutate writeRect(cells) shape; sentinel filter key 0xFFFF -> 0xFE00 (ciolib's ungetch / rip_getch reassembly only re-composes a 16-bit key when the low byte is 0x00 or 0xe0); new T05 step issues `sleep 1 && printf` so the Hook.every wall-clock assertion is no longer racy on local PTYs. Co-Authored-By: Claude Opus 4.7 (1M context)n --- mSynchronetn hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net ----------------------------------------------------------- [Voltar]