It seems [puts] will block or push data in the background. If it is interrupted with [alarm] it happily continues. Here is a small patch to allow TclX alarm to interrupt blocking output [[puts]]. Is this a good idea? ====== Index: generic/tclIO.c =================================================================== --- generic/tclIO.c +++ generic/tclIO.c @@ -2416,16 +2416,17 @@ * write any more output at this time. */ if (written < 0) { /* - * If the last attempt to write was interrupted, simply retry. + * If the last attempt to write was interrupted, Check for async events or simply retry. */ - if (errorCode == EINTR) { - errorCode = 0; - continue; + if (!Tcl_AsyncReady() || Tcl_AsyncInvoke(interp, TCL_OK) == TCL_OK) { + errorCode = 0; + continue; + } } /* * If the channel is non-blocking and we would have blocked, start * a background flushing handler and break out of the loop ======