read中のIOオブジェクトをcloseしたときのIOErrorのバックトレース

fork してパイプで云々というのをやっているとよくあるシチュエーションなのですが、いまだに一瞬ひっかかりそうになります。

      1 pin, pout = IO.pipe
      2 thr = Thread.start do pin.read end
      3 pin.close
      4 thr.value

実行結果

test.rb:3: stream closed (IOError)
        from test.rb:4:in `value'
        from test.rb:4

バックトレースのトップは3行目のcloseで発生しているかのようになるんですよね。
なんとなく理由は判るような気もするのでこういうものと思って気をつけるようにしています。