From 38f383524b2aca5fefd89668aee46a8db435dc82 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Tue, 25 Aug 2026 19:33:37 +0200 Subject: [PATCH 1/2] gh: update tcl91 job to Tcl 9.1b0 Assisted-by: Claude:claude-fable-5 Signed-off-by: Xavier Delaruelle --- .github/workflows/linux_tests.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux_tests.yaml b/.github/workflows/linux_tests.yaml index 18b89a99b..b02bfd149 100644 --- a/.github/workflows/linux_tests.yaml +++ b/.github/workflows/linux_tests.yaml @@ -436,9 +436,9 @@ jobs: # libtclenvmodules build requirements sudo apt-get install -y gcc autoconf # manually install tcl9.1 - curl -L --output tcl9.1a1-src.tar.gz http://downloads.sourceforge.net/tcl/tcl9.1a1-src.tar.gz - tar xfz tcl9.1a1-src.tar.gz - cd tcl9.1a1/unix + curl -L --output tcl9.1b0-src.tar.gz http://downloads.sourceforge.net/tcl/tcl9.1b0-src.tar.gz + tar xfz tcl9.1b0-src.tar.gz + cd tcl9.1b0/unix ./configure make -j sudo make install From e96a0a9419457ea18b141c3ee5f1919c4927d6a3 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Tue, 25 Aug 2026 19:37:58 +0200 Subject: [PATCH 2/2] ts: fail fast when modulecmd is killed by a signal When a spawned modulecmd process dies from a signal, closing its output channel raises a CHILDKILLED error that escapes the readpipe event handler as a background error. Without a bgerror procedure defined under runtest, the endpipe variable is left unset and the vwait call in modulecmd_xxx_ hangs forever, freezing the testsuite run until the CI job 6-hour timeout. Define a bgerror procedure that reports the caught error and releases the ongoing command wait, so such a crash makes the related test fail right away. Assisted-by: Claude:claude-fable-5 Signed-off-by: Xavier Delaruelle --- testsuite/config/unix.exp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/testsuite/config/unix.exp b/testsuite/config/unix.exp index 58d04c1f8..c31571a21 100644 --- a/testsuite/config/unix.exp +++ b/testsuite/config/unix.exp @@ -29,6 +29,16 @@ # Tcl>=8.6): use channel pipe instead of saving these outputs in file if {[lindex [lsort -dictionary [list 8.6 [info tclversion]]] 1] eq [info tclversion]} { +# catch background errors, like a modulecmd process killed by a signal that +# makes readpipe raise an uncaught CHILDKILLED error from its event handler. +# without this catching procedure defined, such an error leaves the endpipe +# variable unset and the vwait call in modulecmd_xxx_ hangs forever +proc bgerror {msg} { + send_user "ERROR: background error caught: $msg\n" + # release ongoing command wait to make related test fail right away + set ::endpipe error +} + proc readpipe {p1 p2 varname {exit_varname {}}} { append ::$varname [read $p1] if {[eof $p1]} {