Is this a bug in pipe? It happens when -buffering none and putting a string of length > 8192 into a pipe, or with -buffering full and when manually flushing. package require Tclx pipe out in fconfigure $in -buffering none fconfigure $out -blocking 0 puts -nonewline $in [string repeat H 8193] # hangs already here puts [read $out] close $in close $out same problem with: package require Tclx pipe out in fconfigure $in -buffering full -buffersize 1000000 fconfigure $out -blocking 0 -buffering full -buffersize 1000000 puts -nonewline $in [string repeat H 8193] flush $in puts [read $out] close $in close $out