Browse Source
Piping a script into shell mode then exiting the restarted interactive repl intermittently froze the shell: shellfilter::run's teardown made a bare synchronous thread::send (settings-reset in shellthread::manager::unsubscribe) to the shellfilter-run syslog log worker, whose event loop had silently stopped servicing events (G-036: Tcl 9-only console+udp worker wedge - root-cause tracked separately). - shellthread 1.6.3: unsubscribe settings-reset send is now -async (sends to a thread are FIFO, so a later reuse still sees the reset applied first); shutdown_free_threads keeps its timeout timer armed across all vwait iterations (was cancelled on the first response, leaving later waits unbounded); get_tag_config's bare sync send flagged as same hazard class. - shellfilter 0.2.4: shellfilter::run honors its -syslog option (default empty -> noop runtag log worker, no thread created) instead of the hardcoded 127.0.0.1:514 debug leftover. Syslog remains supported when explicitly configured. Verified: automated repro (hidden console, piped script scheduling a delayed ::punk::repl::exit in the restarted repl) hung before, exits cleanly after - including with syslog force-enabled against a genuinely wedged worker. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.commaster
5 changed files with 26 additions and 11 deletions
@ -1,3 +1,3 @@
|
||||
[project] |
||||
name = "punkshell" |
||||
version = "0.4.1" |
||||
version = "0.4.2" |
||||
|
||||
@ -1,4 +1,5 @@
|
||||
0.2.3 |
||||
0.2.4 |
||||
#First line must be a semantic version number |
||||
#all other lines are ignored. |
||||
#0.2.3 - shellfilter::run: try/finally guarantees tee-stack removal (stdout/stderr restoration) even when the body errors; decorative stack-status table rendering in log::critical blocks is catch-guarded so a rendering failure (e.g mismatched module snapshots - stale textblock vs new punk::ansi sgr_merge_singles options) degrades to a log note instead of aborting the run and leaving the process's stdout/stderr diverted (silent-output-loss failure mode found via tomlish runtests 2026-07-06) |
||||
#0.2.4 - shellfilter::run honors its -syslog option (default empty -> the shellfilter-run log worker is a noop, no thread created) instead of the hardcoded 127.0.0.1:514 debug leftover; syslog remains supported when explicitly configured. Part of the piped-stdin exit/quit hang fix - the always-on syslog worker exposed the G-036 Tcl 9 console+udp worker wedge on the exit teardown path (see shellthread 1.6.3) |
||||
#0.2.3 - shellfilter::run: try/finally guarantees tee-stack removal (stdout/stderr restoration) even when the body errors; decorative stack-status table rendering in log::critical blocks is catch-guarded so a rendering failure (e.g mismatched module snapshots - stale textblock vs new punk::ansi sgr_merge_singles options) degrades to a log note instead of aborting the run and leaving the process's stdout/stderr diverted (silent-output-loss failure mode found via tomlish runtests 2026-07-06) |
||||
|
||||
@ -1,3 +1,4 @@
|
||||
1.6.2 |
||||
1.6.3 |
||||
#First line must be a semantic version number |
||||
#all other lines are ignored. |
||||
#all other lines are ignored. |
||||
#1.6.3 - manager teardown must not block on a wedged worker (G-036: Tcl 9 console+udp worker event-loop wedge): unsubscribe's settings-reset thread::send is now -async (was bare synchronous - froze exit/quit when the shellfilter-run syslog worker had wedged); shutdown_free_threads keeps its timeout timer armed across all vwait iterations (was cancelled on first response, leaving later waits unbounded); get_tag_config's bare synchronous send flagged as the same hazard class (needs a result - convert to async+vwait-with-timeout if it shows in a hang) |
||||
|
||||
Loading…
Reference in new issue