Menu

#4956 thread::cancel not reporting error

obsolete: 8.6b2
open
9
2011-11-17
2011-11-17
Don Porter
No

$ 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

Discussion

  • Joe Mistachkin

    Joe Mistachkin - 2011-11-17

    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.

     
  • Don Porter

    Don Porter - 2011-12-01

    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?