$ cat demo2.tcl
package require Thread 2.7
set ::bar "NO ERROR THROWN"
proc ::foo {id info} {
set ::bar "Thread $id stack:\n$info"
}
thread::errorproc ::foo
set one [thread::create -joinable {while 1 {}}]
thread::cancel $one
thread::join $one
puts stderr "SAVED ERROR: $::bar"
$ make shell SCRIPT=demo2.tcl
...
SAVED ERROR: NO ERROR THROWN
From the code snippet you included above, it seems like you are expecting to have the sending interpreter receive an error when it cancels the interpreter in the other thread? The sending interpreter does not encounter any error condition by canceling the other thread and the fact that your script completes indicates that the target (receiving) thread is being canceled properly.
I thought a cancellation got converted into
a (un-[catch]able?) TCL_ERROR status unwinding
up through the call stack in the cancelled thread?
Is the issue really with [thread::create] maybe?
Not (yet) in an event loop, so don't have thread::errorproc
handling engaged?