    # File lib/rfilter/deliver.rb, line 172
        def deliver_filter(message, *command)
          begin
            to_r, to_w = IO.pipe
            from_r, from_w = IO.pipe
            if pid = fork
              # parent
              to_r.close
              from_w.close
              writer = Thread::new {
                message.each { |line|
                  to_w << line
                  to_w << "\n" unless line[-1] == ?\n
                }
                to_w.close
              }
              yield from_r
            else
              # child
              begin
                to_w.close
                from_r.close
                STDIN.reopen(to_r)
                to_r.close
                STDOUT.reopen(from_w)
                from_w.close
                exec(*command)
              ensure
                exit!
              end
            end
          ensure
            writer.kill if writer and writer.alive?
            [ to_r, to_w, from_r, from_w ].each { |io|
              if io && !io.closed?
                begin
                  io.close
                rescue Errno::EPIPE
                end
              end
            }
          end
          Process.waitpid2(pid, 0)[1]
        end