require 'thread' require 'fcntl' module Hydra class ThreadsafeIO < IO def initialize(existing_io) fd = existing_io.fcntl(Fcntl::F_DUPFD) super(fd) @mutex = Mutex.new end def write(*args) @mutex.synchronize do super(*args) end end end end